inline ll __read() { ll x(0), t(1); charo(getchar()); while (o < '0' || o > '9') { if (o == '-') t = -1; o = getchar(); } for (; o >= '0' && o <= '9'; o = getchar()) x = (x << 1) + (x << 3) + (o ^ 48); return x * t; }
structPoint { ll x, y; Point(ll x = 0, ll y = 0) : x(x), y(y) {} Point operator + (const Point &Temp) const { returnPoint(x + Temp.x, y + Temp.y); } }stk[maxn], L, R, M;
ll n;
inlineboolIn_R(ll x, ll y) { return x * y <= n; }
inlinedoubleSlope(ll x) { return (double)n / x / x; }
inline _ll Slove() { _ll res(0); intt(0), rt = cbrt(n); stk[++t] = Point(1, 0); stk[++t] = Point(1, 1); ll m = sqrt(n), x = n / m, y = m + 1; while (1) { for (L = stk[t--]; !In_R(x + L.x, y - L.y); x += L.x, y -= L.y) res += x * L.y + (L.y + 1) * (L.x - 1) / 2; if (y <= rt) break; for (R = stk[t]; In_R(x + R.x, y - R.y); R = stk[--t]) L = R;
while (1) { M = L + R; if (!In_R(x + M.x, y - M.y)) { stk[++t] = (R = M); } else { if (Slope(x + M.x) <= (double) R.y / R.x) break; L = M; } } } for (int i = 1; i < y; ++i) res += n / i; return res * 2 - 1ll * m * m; }