import sys import math def solve(): input_data = sys.stdin.read().split() if not input_data: return N = int(input_data[0]) MOD = 998244353 inv2 = pow(2, MOD - 2, MOD) inv6 = pow(6, MOD - 2, MOD) inv30 = pow(30, MOD - 2, MOD) def F(X): if X <= 0: return 0 M = math.isqrt(X) n = (M - 1) % MOD S2 = n * (n + 1) % MOD * (2 * n + 1) % MOD * inv6 % MOD v = n * (n + 1) % MOD * inv2 % MOD S3 = v * v % MOD term4 = (3 * n * n % MOD + 3 * n - 1) % MOD S4 = n * (n + 1) % MOD * (2 * n + 1) % MOD * term4 % MOD * inv30 % MOD ans = (2 * S4 + 3 * S3 + S2) % MOD X_mod = X % MOD M_mod = M % MOD M2_mod = M_mod * M_mod % MOD rem_count = (X_mod - M2_mod + 1 + MOD) % MOD rem_sum = (X_mod + M2_mod) * rem_count % MOD * inv2 % MOD ans = (ans + M_mod * rem_sum) % MOD return ans 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 events.append((v, x)) x += 1 events.sort(key=lambda item: item[0]) curr_v = 1 ans = 0 H = 1 idx = 0 L = len(events) while idx < L: v = events[idx][0] if v > curr_v: val = (F(v - 1) - F(curr_v - 1)) % MOD ans = (ans + H * val) % MOD curr_v = v while idx < L and events[idx][0] == v: x = events[idx][1] H = H * x % MOD * inv[x - 1] % MOD idx += 1 if curr_v <= N: val = (F(N) - F(curr_v - 1)) % MOD ans = (ans + H * val) % MOD print((ans % MOD + MOD) % MOD) if __name__ == '__main__': solve()