Function

%3D1%5D&preview=true)

%3D1%5D%0A%5C%5C%0A%3D%5Csum_%7Bd%3D1%7D%5E%7Bn%7D%5Csum_%7Bi%3D1%7D%5E%7Bn%7D%5Cfrac%7Bi%7D%7Bd%7D%5Bd%7Ci%2Cgcd(d%2C%5Cfrac%7Bi%7D%7Bd%7D)%3D1%5D%0A%5C%5C%3D%0A%20%5Csum_%7Bd%3D1%7D%5E%7Bn%7D%5Csum_%7Bi%3D1%7D%5E%7B%5Cfrac%7Bn%7D%7Bd%7D%7Di%5B(gcd(d%2Ci)%3D1%5D%0A%5C%5C%3D%0A%5Csum_%7Bd%3D1%7D%5E%7Bn%7D%5Csum_%7Bi%3D1%7D%5E%7B%5Cfrac%7Bn%7D%7Bd%7D%7Di%5Csum_%7Bk%7C(i%2Cd)%7D%5Cmu(k)%0A%5C%5C%3D%0A%5Csum_%7Bk%3D1%7D%5E%7B%5Csqrt%20n%7D%5Cmu(k)%5Ccdot%20k%5Ccdot%20g(%5Cfrac%7Bn%7D%7Bk%5E2%7D)%0A%5C%5C%0Ag(n)%3D%5Csum_%7Bi%3D1%7D%5E%7Bn%7D%5Cfrac%7B%5Cleft%20%5Clfloor%20%5Cfrac%7Bn%7D%7Bi%7D%5Cright%20%5Crfloor%5Ccdot%20(%5Cleft%20%5Clfloor%20%5Cfrac%7Bn%7D%7Bi%7D%5Cright%20%5Crfloor%2B1)%7D%7B2%7D%0A&preview=true)

#include<bits/stdc++.h>
using namespace std;
#define me(a,x) memset(a,x,sizeof(a))
#define sc scanf
#define pr printf
#define IN freopen("in.txt","r",stdin);
#define OUT freopen("out.txt","w",stdout);
typedef long long ll;
typedef unsigned long long ull;
const int N=1e6+6;
const int mod=1e9+7;
const int inv2=mod+1>>1;
int O(){putchar('\n');return 0;}template<typename T,typename... Ty>
int O(const T& a,const Ty&... b){cout<<a<<' ';return O(b...);}
void I(){}template<typename T,typename... Ty>void I(T& a,Ty&... b){cin>>a;I(b...);}
template<typename T>void db(T *bg,T *ed){while(bg!=ed)cout<<*bg++<<' ';pr("\n");}
inline ll mul_64(ll x,ll y,ll c){return (x*y-(ll)((long double)x/c*y)*c+c)%c;}
inline ll ksm(ll a,ll b,ll c){ll ans=1;for(;b;b>>=1,a=a*a%c)if(b&1)ans=ans*a%c;return ans;}
short mu[N];
bool vis[N];
int cnt=0;
int pri[N]={0};
void pre(){
mu[1]=1;
for(int i=2;i<N;i++){
if(!vis[i])mu[i]=-1,pri[++cnt]=i;
for(int j=1;j<=cnt&&i*pri[j]<N;j++){
vis[i*pri[j]]=1;
if(i%pri[j]==0){
mu[i*pri[j]]=0;
break;
}
else mu[i*pri[j]]=-mu[i];
}
}
}
ll f(ll n){
n%=mod;
return n*(n+1)%mod*inv2%mod;
}
ll g(ll n){
ll ans=0;
for(ll i=1,last;i<=n;i=last+1){
last=n/(n/i);
ll x=f(n/i);
ans+=(last-i+1+mod)*x%mod;
if(ans>=mod)ans%=mod;
if(ans<=0)ans=(ans+mod)%mod;
}
return ans;
}
int main(){
pre();
int t;cin>>t;
while(t--){
ll ans=0;
ll n;sc("%lld",&n);
for(int i=1;1LL*i*i<=n;i++){
if(mu[i]){
ans+=mu[i]*i*g(n/i/i);
if(ans>=mod)ans%=mod;
if(ans<=0)ans=(ans+mod)%mod;
}
}
pr("%lld\n",ans);
}
}