#include using namespace std; using ll = long long; constexpr ll mod = 998244353; constexpr int NMAX = 3e7; int f[NMAX + 1]; int main() { int N, M; cin >> N >> M; if(N > M) swap(N, M); vector primes; primes.reserve(1858000); memset(f, 0, sizeof(f)); f[1] = 1; for(int i = 2; i <= N; ++i) { if(f[i] == 0) { primes.push_back(i); f[i] = 1 - i; } for(auto p : primes) { int idx = i * p; if(idx > N) break; if(i % p == 0) { f[idx] = f[i]; break; } else { f[idx] = f[i] * (1 - p); } } } ll ans = 0; for(int d = 1; d <= N; ++d) { const ll x = N / d, y = M / d; ans += d * (f[d] + mod) % mod * (x * (x + 1) / 2 % mod) % mod * (y * (y + 1) / 2 % mod) % mod; } cout << ans % mod << "\n"; }