#define int long long constint P = 998244353, N = 3010, K = 16; int n; int f[1<<K], g[1<<K], phifac[1<<K]; int primes[K] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, };
cin >> n; for (int i = 1, a; i <= n; i++) { cin >> a; num[i].a = a; for (int p = 0; p < K; p++) { while (a % primes[p] == 0) { num[i].state |= 1 << p; a /= primes[p]; } } // 如果不存在大于 sqrt(V) 的质数,那么 lp 显然是 1 num[i].lp = a; } sort(num+1, num+1+n);
f[0] = 1; for (int S = 0; S < 1<<K; S++) { // 这里是上文的 P(T) phifac[S] = 1; for (int k = 0; k < K; k++) { if (S >> k & 1) { phifac[S] = phifac[S] * (primes[k] - 1) % P * qpow(primes[k], P-2) % P; } } }
for (int i = 1; i <= n; i++) { int j = i;
memset(g, 0, sizeof g); while (j <= n && num[j].lp == num[i].lp) { int ffac = (num[j].lp - 1) * qpow(num[j].lp, P-2) % P; for (int S = (1<<K)-1; S >= 0; S--) { if (num[i].lp == 1) { int fac = f[S] * num[j].a % P * phifac[num[j].state & ~S] % P; add(f[S | num[j].state], fac); } else { int facf = f[S] * num[j].a % P * ffac % P * phifac[num[j].state & ~S] % P; int facg = g[S] * num[j].a % P * phifac[num[j].state & ~S] % P; add(g[S | num[j].state], facf + facg); } } j++; }
i = j-1; for (int S = 0; S < 1 << K; S++) add(f[S], g[S]); } int ans = 0; for (int S = 0; S < 1 << K; S++) add(ans, f[S]); cout << ans << '\n'; return0; }