#include <stdio.h>
const int N = 1e6 + 1;
int T, n;
int dp[N + 1][3] = { 0, 0, 0, 1, 1, 1 };
int sum[N + 1]={};
int start[N + 1]={};
int p = 1000000007;
long long pro[N + 1] = {0, 1}, inv[N + 1] = {0, 1}, buf[N + 1] = {0, 1};
int main() {
for (int i = 1; i <= N; i++) {
start[i] = dp[i][0] > dp[i - 1][0] ? i : start[i - 1];
sum[i] = (sum[i - 1] + (dp[start[i]][0] == dp[i][0] ? dp[i][1] : 0)) % p;
for (int j = i << 1; j <= N; j += i) {
if (dp[i][0] + 1 == dp[j][0]) {
dp[j][1] = (dp[j][1] + j + dp[i][1]) % p;
dp[j][2]++;
}else if (dp[i][0] >= dp[j][0]) {
dp[j][1] = ((long long)j * dp[i][2] % p + dp[i][1]) % p;
dp[j][0] = dp[i][0] + 1;
dp[j][2] = dp[i][2];
}
}
}
for (int i = 2; i <= N; i++)
pro[i] = pro[i - 1] * i % p,
buf[i] = (p - p / i) * buf[p % i] % p,
inv[i] = inv[i - 1] * buf[i] % p;
scanf("%d", &T);
while (T--) {
scanf("%d", &n);
printf("%lld\n", (sum[n] - sum[start[n] - 1] + p) % p * (pro[n] * inv[dp[start[n]][0]]) % p);
}return 0;
}