#include #include #include typedef long long LL; const int Mod = 1000000007; const int Inv2 = (Mod + 1) / 2; const int MN = 2000005, MP = 148934; inline void Sub(int &x, int y) { x -= y; x += x >> 31 & Mod; } inline void Add(int &x, int y) { Sub(x, Mod - y); } bool ip[MN]; int p[MP], pc; int h[MN], mu[MN], sig1[MN]; void Sieve(int N) { mu[1] = sig1[1] = 1; for (int i = 2; i <= N; ++i) { if (!ip[i]) p[++pc] = i, h[i] = 1, mu[i] = -1, sig1[i] = 1 + i; for (int j = 1, k; j <= pc; ++j) { if ((k = p[j] * i) > N) break; ip[k] = 1; if (i % p[j]) { h[k] = i; mu[k] = -mu[i]; sig1[k] = (1 + p[j]) * sig1[i]; } else { h[k] = h[i]; mu[k] = 0; sig1[k] = (1 + p[j] * sig1[i / h[i]]) * sig1[h[k]]; break; } } } for (int i = 2; i <= N; ++i) Add(sig1[i], sig1[i - 1]); } LL N; inline int ssig1(LL n) { if (n <= 2000000) return sig1[n]; int sum = 0; for (LL i = 1, j, k; i <= n; i = j + 1) { k = n / i, j = n / k; sum = (sum + (i + j) % Mod * ((j - i + 1) % Mod) % Mod * Inv2 % Mod * (k % Mod)) % Mod; } return sum; } int main() { Sieve(2000000); int Tests; scanf("%d", &Tests); while (Tests--) { scanf("%lld", &N); int Ans = 0; for (int i = 1; (LL)i * i <= N; ++i) if (mu[i]) Ans = (Ans + (LL)i * mu[i] * ssig1(N / ((LL)i * i))) % Mod; printf("%d\n", (Ans + Mod) % Mod); } return 0; }