import math M = 998244353 INV_2 = 499122177 INV_20 = 149736653 def f(n): m = math.isqrt(n) % M n = n % M m2 = m * m % M t = (m2 - 1) * m % M * (8 * m2 - 5 * m - 2) % M * INV_20 % M t2 = m * (n - m2) % M * (m2 + n - 1) % M * INV_2 % M return (t + t2) % M N = int(input()) N += 1 stk = [(N, 0)] for k in range(3, 61): n = 2 while True: x = n**k if N <= x: break stk.append((x, n)) n += 1 stk.sort() stk.reverse() ans = 0 L = 1 cur = 1 inv = [0, 1] for i in range(2, 1000001): inv.append(M - (M // i * inv[M % i] % M)) while L != N: while stk[-1][0] == L: _, n = stk.pop() if n != 0: cur = cur * inv[n - 1] % M * n % M R = min(stk[-1][0], N) ans = (ans + (f(R) - f(L)) * cur) % M L = R print((ans + M) % M)