#include<bits/stdc++.h>typedeflonglong lld;usingnamespace std;const size_t MAXN =1e7+5;constint MOD =998244353;bool isnp[MAXN];int pcn, pri[MAXN/10];
lld g[MAXN], s[MAXN];int phi[MAXN], q[MAXN];int mod;voidinit_prime(){
g[1]= q[1]= phi[1]=1;for(int i =2; i < MAXN; i++){if(!isnp[i]){
g[i]= s[i]=2*i-1;
q[i]= i-1;
phi[i]= i-1;
pri[pcn++]= i;}for(int j =0; j < pcn; j++){int k = i * pri[j];if(k >= MAXN)break;
isnp[k]=true;if(i % pri[j]==0){
s[k]=(s[i]+ q[i]+0ll)* pri[j];
q[k]= q[i]* pri[j];
g[k]= g[i]/ s[i]* s[k];
phi[k]= phi[i]* pri[j];break;}else{
phi[k]= phi[i]*(pri[j]-1);
q[k]= q[pri[j]];
s[k]= s[pri[j]];
g[k]= g[i]* s[k];}}}for(int i =1; i < MAXN; i++){
g[i]=(g[i-1]+ i +(3* i +3)*(g[i]% MOD))% MOD;}}inttwo(__int128 n){if(n <8)return1;int l =1, r =1e9+7, m;while(r - l >1){
m =(l + r)>>1;if(m > n / m / m)
r = m;else
l = m;}return r-1;}voidsolve(){
__int128 n =0;char buf[30];scanf("%s", buf);for(int i =0; buf[i]; i++)
n = n *10+(buf[i]-'0');int m =two(n);
lld ans = g[m-1];
__int128 qwq = m; qwq *= m; qwq *= m; qwq -=1;for(int i =1; i * i <= m; i++){if(m % i ==0){
ans += phi[i]*((n / i % MOD)-(qwq / i % MOD))% MOD;if(m != i * i)
ans += phi[m / i]*(n /(m / i)% MOD -(qwq /(m / i)% MOD))% MOD;}}
ans %= MOD;if(ans <0) ans += MOD;printf("%lld\n", ans);}intmain(){init_prime();int T;scanf("%d",&T);while(T--)solve();return0;}