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<bits/stdc++.h>
using namespace std;

#define int long long
#define ii pair <int, int>
#define app push_back
#define all(a) a.begin(), a.end()
#define bp __builtin_popcount
#define ll long long
#define mp make_pair
#define f first
#define s second
#define Time (double)clock()/CLOCKS_PER_SEC

const int N = 1000 * 1000 + 1, MOD = 998244353;

int fp(int a, int p) {
    ll ans = 1, c = a;
    for (int i = 0; (1ll << i) <= p; ++i) {
        if ((p >> i) & 1) ans = ans * c % MOD;
        c = c * c % MOD;
    }   
    return ans;
}   

int inv[N];
vector <int> d[N];
int cnt[N], dp[N], sum[N];
int solve(int x) {
    ll ans = 0;
    for (int y : d[x]) {
        dp[y] = sum[y];
        for (int add : d[x/y]) {
            if (add != 1) {
                dp[y] -= dp[y * add];
                if (dp[y] < 0)
                    dp[y] += MOD;
            }   
        }   
        ans = (ans + (ll)dp[y] * inv[y]) % MOD;
    }   
    return (ans * x) % MOD;
}   

signed main() {
    #ifdef HOME
    freopen("input.txt", "r", stdin);
    #else
    #define endl '\n'
    ios_base::sync_with_stdio(0); cin.tie(0);
    #endif
    for (int i = 0; i < N; ++i)
        inv[i] = fp(i, MOD - 2);
    for (int i = 1; i < N; ++i)
        for (int j = i; j < N; j += i)
            d[j].app(i);
    for (int i = 0; i < N; ++i)
        reverse(all(d[i]));

    #ifdef HOME
    cout << Time << endl;
    #endif

    int n;
    cin >> n;
    while (n--) {
        int x;
        cin >> x;
        ++cnt[x];
    }   
    for (int i = 1; i < N; ++i) {
        for (int j = i; j < N; j += i)
            sum[i] += cnt[j] * j;
        sum[i] %= MOD;
    }
    ll ans = 0;
    for (int i = 1; i < N; ++i)
        if (cnt[i]) {
            ll add = solve(i) - i;
            if (add < 0)
                add += MOD;
            ans += add * cnt[i];
            ans %= MOD;
        }   
    cout << (ans * inv[2]) % MOD << endl;            

    #ifdef HOME
    cout << Time << endl;
    #endif
}