voidread(longlong &t){ char c; while ((c = getchar()) < '0' || c > '9') ; t = c - '0'; while ((c = getchar()) >= '0' && c <= '9') (t *= 10) += c - '0'; }
int N; char mui[100000000]; int d[100000000], sum[100000000], prime[10000000]; bool vis[100000000]; longlong n, sigma[100000000];
voidinit(){ int top = 0; mui[1] = 1, sigma[1] = 1; for (int i = 2; i < N; ++ i) { if (! vis[i]) prime[top ++] = i, mui[i] = -1, sigma[i] = 2, d[i] = 1; for (int j = 0; j < top; ++ j) { int k = i * prime[j]; if (k >= N) break; vis[k] = true; if (i % prime[j]) mui[k] = -mui[i], sigma[k] = sigma[i] << 1, d[k] = 1; else { mui[k] = 0, sigma[k] = sigma[i] / (d[i] + 1) * (d[i] + 2), d[k] = d[i] + 1; break; } } } for (int i = 1; i < N; ++ i) sum[i] = sum[i - 1] + mui[i] * mui[i], sigma[i] += sigma[i - 1]; }
inlinelonglongget_mui(longlong n){ if (n < N) return sum[n]; int q = sqrt(n); longlong ret = 0; for (registerint i = 1; i <= q; ++ i) if (mui[i]) ret += mui[i] * (n / i / i); return ret; }
inlinelonglongget_sigma(longlong n){ if (n < N) return sigma[n]; longlong ret = 0; for (registerlonglong i = 1, j; i <= n; i = j + 1) j = n / (n / i), ret += (j - i + 1) * (n / i); return ret; }
longlongcalc(longlong n){ int q = sqrt(n); longlong ret = 0; for (registerint i = 1; i <= q; ++ i) if (mui[i]) ret += get_sigma(n / i); for (registerlonglong i = q + 1, j, cur, last = sum[q]; i <= n; i = j + 1, last = cur) j = n / (n / i), cur = get_mui(j), ret += (cur - last) * get_sigma(n / i); return ret; }
signedmain(){ longlong T; read(T); if (T > 800) N = 20000; else N = 100000000; init(); while (T --) read(n), printf("%lld\n", calc(n)); return0; }