#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 prefix_sum=[g](ll r)->mint{ if(r==0)return 0; mint mr=r; mint sr=isqrt(r); return g(sr)-g(1)+sr*(mr*(mr+1)/2-sr*sr*(sr*sr-1)/2); }; return prefix_sum(r)-prefix_sum(l-1); }; vector> 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; cur/=v[i]; v[i]++; cur*=v[i]; l=r; } if(l<=n)ans+=sum(l,n)*cur; cout<