#include <bits/stdc++.h>
#pragma GCC target("avx2")
#define ll long long
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#define ld long double
#define len(x) (int)x.size()
#define all(x) x.begin(), x.end()
const ll mod2 = 998244353;

using namespace std;

//#define mtask

ll fp(ll n, ll k){
    if(k == 0) return 1;
    if(k & 1) return (fp(n, k - 1) * n) % mod2;
    ll res = (fp(n, k / 2));
    return (res * res) % mod2;
}

ll ob2 = fp(2, mod2 - 2);
ll ob6 = fp(6, mod2 - 2);

pair<ll, ll> calc(ll c, ll n){
    ll l = 0;
    ll r;
    {
        ll le = 0, ri = (n + c - 1) / c;
        while(le + 1 != ri){
            ll mid = (le + ri) / 2;
            if(n / mid > c){
                le = mid;
            }
            else{
                ri = mid;
            }
        }
        l = ri;
    }
    {
        ll le = 0, ri = (n + c) / c;
        while(le + 1 != ri){
            ll mid = (le + ri) / 2;
            if(n / mid >= c){
                le = mid;
            }
            else{
                ri = mid;
            }
        }
        r = le;
    }
    if(l > r) return {0, l};
    c %= mod2;
    ll x = n % r;
    x %= mod2;
    ll k = r - l;
    k %= mod2;
    ll ans = 0;
    ans = (((ll)k * (k + 1)) % mod2) * (((2 * k + 1) * c % mod2 * ob6 % mod2) % mod2);
    ans = ((ans % mod2) * c) % mod2;
    ll f = (k + 1) * (x * x % mod2) % mod2;
    ans += f % mod2;
    ans %= mod2;
    f = (k * (k + 1) % mod2) * (x * c % mod2) % mod2;
    f %= mod2;
    ans += f;
    ans %= mod2;
    f = ((k + 1) * (2 * x % mod2 + (k * c % mod2)) % mod2) * ob2;
    f %= mod2;
    ans += f;
    ans %= mod2;
    ll r1 = r % mod2;
    ll l1 = l % mod2;
    ll s = (r1 * (r1 + 1) % mod2) * (2 * r1 + 1) % mod2;
    s *= ob6;
    s %= mod2;
    s -= ((l1 * (l1 - 1) % mod2) * (2 * l1 - 1) % mod2) * ob6 % mod2;
    s += mod2;
    s %= mod2;
    s -= r1 * (r1 + 1) % mod2 * ob2 % mod2;
    s += l1 * (l1 - 1) % mod2 * ob2 % mod2;
    s %= mod2;
    s += mod2;
    s %= mod2;
    s *= c;
    s %= mod2;
    ans += s;
    ans = ans * ob2 % mod2;
    return {ans, l};
}

void solve(){
#ifdef LOCAL
    auto st = clock();
#endif
    ll n;
    cin >> n;
#ifdef LOCAL
    //ll ans1 = 0;
    //for(int i = 1; i <= n; ++i){
    //    ans1 += i * (i - 1) / 2 * (n / i) + (n % i) * (n % i + 1) / 2;
    //}
    //cout << ans1 << '\n';
#endif
    ll ans = 0;
    ll c = 1;
    while(true){
        auto [rs, t] = calc(c, n);
        ans += rs;
//        cout << t << '\n';
        ans %= mod2;
        if(t == 1) break;
        c = (n / (t - 1));
    }
    cout << ans << '\n';
#ifdef LOCAL
    auto fin = clock();
    cout << (fin - st) * 1000 / (ld) CLOCKS_PER_SEC << '\n';
#endif
}

int main() {
    ios_base::sync_with_stdio(false);
    cout.precision(40);
#ifdef LOCAL
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
#endif
#ifdef mtask
    int t;
    cin >> t;
    while(t--)
#endif
    solve();
}