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: Time Limit Exceeded)

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long ll;
#define chmin(a,b) a=min(a,b)
#define chmax(a,b) a=max(a,b)
#define mod 998244353
#define mad(a,b) a=(a+b)%mod
#define X 1000010
#define N 200010
#pragma GCC optimize("O3")
#pragma GCC target("avx")
//#pragma GCC target("avx2")
#pragma GCC optimize("unroll-loops")
ll po(ll x,ll y){
    ll res=1;
    for(;y;y>>=1){
	if(y&1)res=res*x%mod;
	x=x*x%mod;
    }
    return res;
}
ll inv(ll x){
    return po(x,mod-2);
}
ll kei[X],con[X];
ll n,a[N];
int main(){
    cin.tie(0);
    ios::sync_with_stdio(0);
  for(int i=0;i<X;i++)kei[i]=con[i]=0;
  for(ll i=1;i<X;i++){
      mad(kei[i],inv(i));
      for(ll j=i*2;j<X;j+=i){
	  mad(kei[j],-kei[i]);
      }
  }
  cin>>n;
  for(int i=0;i<n;i++){
      cin>>a[i];
      for(ll j=1;j*j<=a[i];j++){
	  if(a[i]%j>0)continue;
	  con[j]+=a[i];
	  ll t=a[i]/j;
	  if(t!=j){
	      con[t]+=a[i];
	  }
      }
  }
  for(int i=0;i<X;i++){
      con[i]%=mod;
      kei[i]=kei[i]*con[i]%mod;
  }
  ll ans=0;
  for(int i=0;i<n;i++){
      ll cur=0;
      for(ll j=1;j*j<=a[i];j++){
	  if(a[i]%j>0)continue;
	  cur+=kei[j];
	  ll t=a[i]/j;
	  if(t!=j){
	      cur+=kei[t];
	  }
      }
      cur%=mod;
      //cout<<cur<<endl;
      mad(ans,cur*a[i]);
      mad(ans,-a[i]);
  }
  ans=ans*inv(2)%mod;
  if(ans<0)ans+=mod;
  cout<<ans<<endl;
  return 0;
}