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++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <bits/stdc++.h>
using namespace std;
#define modulo 998244353
#define mod(mod_x) ((((long long)mod_x+modulo))%modulo)
#define Inf 100000000

//aのb乗
int beki(int a,int b){
	int x = 1;
	while(b!=0){
		if(b&1){
			x=mod(x*a);
		}
		a=mod(a*a);
		b>>=1;
	}
	return x;
}

//aの逆元
int gyakugen(int a){
	return beki(a,modulo-2);
}

int main(){
	
	int N;
	cin>>N;
	
	vector<int> A(N);
	for(int i=0;i<N;i++)cin>>A[i];
	
	int X = 1000001;

	vector<int> cnt(X,0);
	for(int i=0;i<N;i++){
		cnt[A[i]] = mod(cnt[A[i]] + A[i]);
	}
	
	vector<int> sum(X,0);
	/*
	for(int i=0;i<N;i++){
		for(int j=0;j<yakusuu[A[i]].size();j++){
			sum[yakusuu[A[i]][j]] = mod(sum[yakusuu[A[i]][j]] + A[i]);
		}
	}*/
	
	for(int i=1;i<X;i++){
		for(int j=i;j<X;j+=i){
			int a = cnt[j];
			sum[i] = mod(sum[i] + a);
		}
	}
	
	vector<int> gyaku(X,0);
	for(int i=1;i<X;i++){
		gyaku[i] = mod(gyaku[i] + gyakugen(i));
		for(int j=2*i;j<X;j+=i){
			gyaku[j] = mod(gyaku[j] - gyaku[i]);
		}
	}
	
	int ans = 0;
	
	for(int i=1;i<X;i++){
		int a = mod(sum[i]*sum[i]);
		a = mod(a*gyaku[i]);
		ans = mod(ans + a);
	}
	
	for(int i=0;i<N;i++){
		ans = mod(ans - A[i]);
	}
	ans = mod(ans * gyakugen(2));
	
	cout<<ans<<endl;
		
		
	
	
	return 0;
}