Problem:
Score : 700 points

Problem Statement

We have an integer sequence of length N: A_0,A_1,\cdots,A_{N-1}.

Find the following sum (\mathrm{lcm}(a, b) denotes the least common multiple of a and b):

\sum_{i=0}^{N-2} \sum_{j=i+1}^{N-1} \mathrm{lcm}(A_i,A_j)

Since the answer may be enormous, compute it modulo 998244353.

Constraints

1 \leq N \leq 200000

1 \leq A_i \leq 1000000

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
A_0\ A_1\ \cdots\ A_{N-1}

Output

Print the sum modulo 998244353.

Sample Input 1

3
2 4 6

Sample Output 1

22

\mathrm{lcm}(2,4)+\mathrm{lcm}(2,6)+\mathrm{lcm}(4,6)=4+6+12=22.

Sample Input 2

8
1 2 3 4 6 8 12 12

Sample Output 2

313

Sample Input 3

10
356822 296174 484500 710640 518322 888250 259161 609120 592348 713644

Sample Output 3

353891724

Solution in C++ (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <iostream>
const int MAXN = 200000, MAXA = 1000000, lnMAXA = 10, MOD = 998244353;
int Prime[MAXA/lnMAXA + 5], size;
bool not_prime[MAXA + 5];
int mu[MAXA + 5];
int f[MAXA + 5], h[MAXA + 5], sum, m;
int n;

inline int change(int n) {
	int t = (n + MOD)%MOD;
	return (n & 1) ? n + MOD : n;
}

void input() {
	std::ios_base::sync_with_stdio(false);
	std::cin.tie(0), std::cout.tie(0);
	std::cin >> n;
	for(int i = 1; i <= n; ++i) {
		int a;
		std::cin >> a;
		++h[a];
		sum = (sum + a)%MOD;
		if(m < a) m = a;
	}
}

void sieve() {
	not_prime[1] = true;
	mu[1] = 1;
	for(int i = 2; i <= m; ++i) {
		if(not_prime[i] == false) {
			Prime[size++] = i;
			mu[i] = MOD - 1;
		}
		for(int j = 0; j < size && i*Prime[j] <= m; ++j) {
			not_prime[i*Prime[j]] = true;
			if(i%Prime[j] == 0) break;
			mu[i*Prime[j]] = MOD - mu[i];
		}
	}
	for(int i = 1; i <= m; ++i)
		for(int j = 1; i*j <= m; ++j)
			f[i] = (1LL*f[i] + 1LL*h[i*j]*j)%MOD;
}

long long solve() {
	int res = 0;
	for(int i = 1; i <= m; ++i)
		for(int j = 1, k = i; k <= m; ++j, k += i)
			res = (res + 1LL*mu[j]*f[k]%MOD*f[k]%MOD*k%MOD*j%MOD)%MOD;
	return (change(res - sum) >> 1)%MOD;
}

int main() {
	input();
	sieve();
	std::cout << solve() << "\n";
	return 0;
}