#include #define fi first #define se second #define pb push_back #define mp make_pair #define SZ(x) ((int)x.size()) #define ALL(x) x.begin(),x.end() #define L(i,u) for (register int i=head[u]; i; i=nxt[i]) #define rep(i,a,b) for (register int i=(a); i<=(b); i++) #define per(i,a,b) for (register int i=(a); i>=(b); i--) using namespace std; typedef long double ld; typedef long long ll; typedef unsigned int ui; typedef pair Pii; typedef pair Pll; typedef vector Vi; template inline void read(T &x){ x=0; char c=getchar(); int f=1; while (!isdigit(c)) {if (c=='-') f=-1; c=getchar();} while (isdigit(c)) {x=x*10+c-'0'; c=getchar();} x*=f; } template T gcd(T a, T b){return !b?a:gcd(b,a%b);} template inline void umin(T &x, T y){x=x inline void umax(T &x, T y){x=x>y?x:y;} mt19937 R(chrono::system_clock().now().time_since_epoch().count()); const int N = 1e6+233,mo=1e9+7,inv2=(mo+1)>>1; ll n,res; int prime[N],len,mrk[N],mu[N]; void getp(int n){ mu[1]=1; rep(i,2,n){ if(!mrk[i])prime[++len]=i,mu[i]=-1; rep(j,1,len){ if(i*prime[j]>n)break; mrk[i*prime[j]]=prime[j]; if(i%prime[j]==0)break; mu[i*prime[j]]=-mu[i]; } } } unordered_mapMap; inline int qry(ll n){ if(Map.count(n))return Map[n]; int res=0; /*for(ll i=1;i<=n;i++){ ll c=n/i,j=n/c;res=(res+1ll*((i+j)*(j-i+1)>>1)%mo*(c%mo))%mo; i=j; }*/ int lim=sqrt(n)-1;while((lim+1ll)*(lim+1ll)<=n)lim++; rep(i,1,lim){ll j=n/i;res=(res+1ll*(j-i)*i+(1ll*((j-i)%mo)*((i+1+j)%mo)%mo*inv2%mo))%mo;} res=(res+1ll*lim*(lim+1)/2)%mo; return Map[n]=res; } int main() { getp(N-1);int t;read(t);while(t--){ read(n);res=0;//Map.clear(); for(ll g=1;g*g<=n;g++)if(mu[g]){ res=(res+1ll*qry(n/g/g)*mu[g]*g)%mo; } res=(res%mo+mo)%mo; cout<