import sys import math def solve(): input_data = sys.stdin.read().split() if not input_data: return N = int(input_data[0]) MOD = 998244353 def F(X): if X <= 0: return 0 M = math.isqrt(X) n = M - 1 S2 = n * (n + 1) * (2 * n + 1) // 6 S3 = (n * (n + 1) // 2) ** 2 S4 = n * (n + 1) * (2 * n + 1) * (3 * n * n + 3 * n - 1) // 30 ans = 2 * S4 + 3 * S3 + S2 rem_sum = (X + M * M) * (X - M * M + 1) // 2 ans += M * rem_sum return ans % MOD MAX_INV = 1000005 inv = [0] * MAX_INV inv[1] = 1 for i in range(2, MAX_INV): inv[i] = MOD - (MOD // i) * inv[MOD % i] % MOD events = {} for k in range(3, 60): x = 2 while True: v = x ** k if v > N: break if v not in events: events[v] = [] events[v].append(x) x += 1 sorted_v = sorted(events.keys()) curr_v = 1 ans = 0 H = 1 for v in sorted_v: if v > curr_v: val = (F(v - 1) - F(curr_v - 1)) % MOD ans = (ans + H * val) % MOD for x in events[v]: H = (H * x) % MOD H = (H * inv[x - 1]) % MOD curr_v = v if curr_v <= N: val = (F(N) - F(curr_v - 1)) % MOD ans = (ans + H * val) % MOD print(ans) if __name__ == '__main__': solve()