#include using namespace std; using ll=long long; #include using mint=atcoder::modint998244353; ll isqrt(ll x){ ll s=sqrt(x); while((s+1)*(s+1)<=x)s++; while(s*s>x)s--; return s; } using bint=__int128_t; int main(){ ll n; cin>>n; auto sum=[](ll l,ll r)->mint{ auto g=[](mint x)->mint{ return x*x*(x*x-1)/2; }; auto gsum=[](mint x)->mint{ return (x-1)*x*(x+1)*(x+2)*(2*x+1)/20; }; auto prefix_sum=[g,gsum](ll r)->mint{ if(r==0)return 0; mint mr=r; mint sr=isqrt(r); return (sr-1)*g(sr)-gsum(sr-1)+sr*(mr*(mr+1)/2-sr*sr*(sr*sr-1)/2); }; ///cout<> evs; vector v(60,1); mint cur=1; for(int i=3;i<60;i++){ for(ll j=2;j<=1000000;j++){ bint t=1; for(int k=0;kn)break; } if(t<=n)evs.push_back(make_pair(t,i)); } } ranges::sort(evs); ll l=1; mint ans=0; for(auto[r,i]:evs){ ans+=sum(l,r-1)*cur; //cout<