import math MOD = 998244353 INV2 = pow(2, MOD - 2, MOD) INV6 = pow(6, MOD - 2, MOD) INV30 = pow(30, MOD - 2, MOD) def icbrt(n): x = int(round(n ** (1 / 3))) while (x + 1) ** 3 <= n: x += 1 while x ** 3 > n: x -= 1 return x def sum2(n): n %= MOD return n * (n + 1) % MOD * (2 * n + 1) % MOD * INV6 % MOD def sum3(n): n %= MOD s = n * (n + 1) % MOD * INV2 % MOD return s * s % MOD def sum4(n): n %= MOD return n * (n + 1) % MOD * (2 * n + 1) % MOD * (3 * n * n + 3 * n - 1) % MOD * INV30 % MOD def F(n): if n <= 0: return 0 t = math.isqrt(n) m = t - 1 full = (2 * sum4(m) + 3 * sum3(m) + sum2(m)) % MOD l = t * t tail = t % MOD tail = tail * ((l + n) % MOD) % MOD tail = tail * ((n - l + 1) % MOD) % MOD tail = tail * INV2 % MOD return (full + tail) % MOD def range_sum(L, R): return (F(R) - F(L - 1)) % MOD N = int(input()) c = icbrt(N) inv = [0] * (c + 1) inv[1] = 1 for i in range(2, c + 1): inv[i] = MOD - (MOD // i) * inv[MOD % i] % MOD events = {} for a in range(2, c + 1): ratio = a * inv[a - 1] % MOD x = a * a * a while x <= N: events[x] = events.get(x, 1) * ratio % MOD if x > N // a: break x *= a ans = 0 cur = 1 prev = 1 for x in sorted(events): if prev <= x - 1: ans = (ans + cur * range_sum(prev, x - 1)) % MOD cur = cur * events[x] % MOD prev = x if prev <= N: ans = (ans + cur * range_sum(prev, N)) % MOD print(ans)