#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define all(v) v.begin(), v.end()
void setIO(string name = ""){
ios_base::sync_with_stdio(0);
cin.tie(0);
if (!name.empty()) {
freopen((name + ".inp").c_str(), "r", stdin);
freopen((name + ".out").c_str(), "w", stdout);
}
}
const ll MOD = 1e9 + 7;
const int MAXN = 1e8+1;
ll ans[MAXN+1];
void solve() {
int n; cin >> n;
cout << ans[n] << endl;
}
void build() {
ans[1] = 0;
ans[2] = 1;
ll psum = 2, npsum = 1;
ll ppos = 1, nppos = 1;
for (int i = 3; i < MAXN; i++) {
if (ans[i] == i) {
ppos++;
psum += i;
ans[i] = ans[i-1] + nppos*i - npsum;
ans[i] %= MOD;
}
else {
nppos++;
npsum += i;
ans[i] = ans[i-1] + ppos*i - psum;
ans[i] %= MOD;
}
}
}
int main() {
setIO("pnpdiff");
int t = 1;
for (int i = 2; i <= MAXN; i++) {
if (ans[i] == 0) {
for (int j = i; j <= MAXN; j += i) ans[j] = i;
}
}
cin >> t;
build();
while (t--) solve();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwojZGVmaW5lIGFsbCh2KSB2LmJlZ2luKCksIHYuZW5kKCkKCnZvaWQgc2V0SU8oc3RyaW5nIG5hbWUgPSAiIil7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKCiAgICBpZiAoIW5hbWUuZW1wdHkoKSkgewogICAgICAgIGZyZW9wZW4oKG5hbWUgKyAiLmlucCIpLmNfc3RyKCksICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oKG5hbWUgKyAiLm91dCIpLmNfc3RyKCksICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCn0KCmNvbnN0IGxsIE1PRCA9IDFlOSArIDc7CmNvbnN0IGludCBNQVhOID0gMWU4KzE7CgpsbCBhbnNbTUFYTisxXTsKCnZvaWQgc29sdmUoKSB7CiAgICBpbnQgbjsgY2luID4+IG47CiAgICBjb3V0IDw8IGFuc1tuXSA8PCBlbmRsOwp9Cgp2b2lkIGJ1aWxkKCkgewogICAgYW5zWzFdID0gMDsKICAgIGFuc1syXSA9IDE7CgogICAgbGwgcHN1bSA9IDIsIG5wc3VtID0gMTsgICAgCiAgICBsbCBwcG9zID0gMSwgbnBwb3MgPSAxOwogICAgZm9yIChpbnQgaSA9IDM7IGkgPCBNQVhOOyBpKyspIHsKICAgICAgICBpZiAoYW5zW2ldID09IGkpIHsKICAgICAgICAgICAgcHBvcysrOwogICAgICAgICAgICBwc3VtICs9IGk7CiAgICAgICAgICAgIGFuc1tpXSA9IGFuc1tpLTFdICsgbnBwb3MqaSAtIG5wc3VtOwogICAgICAgICAgICBhbnNbaV0gJT0gTU9EOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbnBwb3MrKzsKICAgICAgICAgICAgbnBzdW0gKz0gaTsKICAgICAgICAgICAgYW5zW2ldID0gYW5zW2ktMV0gKyBwcG9zKmkgLSBwc3VtOwogICAgICAgICAgICBhbnNbaV0gJT0gTU9EOwogICAgICAgIH0gICAKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBzZXRJTygicG5wZGlmZiIpOwogICAgaW50IHQgPSAxOwoKICAgIGZvciAoaW50IGkgPSAyOyBpIDw9IE1BWE47IGkrKykgewoJCWlmIChhbnNbaV0gPT0gMCkgewoJCQlmb3IgKGludCBqID0gaTsgaiA8PSBNQVhOOyBqICs9IGkpIGFuc1tqXSA9IGk7CgkJfQoJfQoKICAgIGNpbiA+PiB0OwoKICAgIGJ1aWxkKCk7CiAgICB3aGlsZSAodC0tKSBzb2x2ZSgpOwp9