#include #include #include #include #include #include using namespace std; const int MOD = (int)1e9 + 7; const int Tmax = 1000033; const int Nmax = 10000003; int lp[Nmax]; long long answer[Nmax]; vector primes; int main() { int T; scanf("%d", &T); assert(1 <= T && T <= 1e6); lp[1] = 1; for (int i = 2; i < Nmax; i ++) { if (!lp[i]) { primes.push_back(i); lp[i] = i; } for (int j = 0; j < primes.size() && primes[j] <= lp[i] && i * 1ll * primes[j] < Nmax; j ++) { lp[primes[j] * i] = primes[j]; } } while (T --> 0) { int N; scanf("%d", &N); assert(1 <= N && N <= 1e7); if (answer[N] != 0) { printf("%lld\n", answer[N]); continue; } int M = N; answer[N] = 1; while (N > 1) { int p = lp[N]; int pw = 1, cnt = 0; while (lp[N] == p) { pw = (pw * 1ll * p); N /= p, cnt ++; } long long res = 0; if (cnt == 1) { res = 1ll * p * p - p + 1; } else { res = (pw * 1ll * pw) * p; res = (res + 1) / (p + 1); } answer[M] = (answer[M] * 1ll * res); } printf("%lld\n", answer[M]); } return 0; }