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 PyPy3 (2.4.0) (judge verdict: Wrong Answer)

V = 1000000

# divisor
def div(n):
    divisors = []
    for i in range(1, int(n**0.5)+1):
        if n % i == 0:
            divisors.append(i)
            if i != n // i:
                divisors.append(n//i)
    # divisors.sort()
    return divisors

# nまでのエラストテネスの篩
def make_prime_checker(n):
    is_prime = [False, True, False, False, False, True] * (n//6+1)
    del is_prime[n+1:]
    is_prime[1:4] = False, True, True
    for i in range(5, int(n**0.5)+1):
        if is_prime[i]:
            is_prime[i*i::i] = [False] * (n//i-i+1)
    return is_prime

# 1からVまでの素数リスト
primes = [p for p, bool in enumerate(make_prime_checker(V)) if bool]

# define w
def w(n):
    if n == 1:
        return 1.0
    else:
        val = 1/n
        for p in primes:
            if n % p == 0:
                val *= (1 - p)
        return val


# count number
def main():
    N = int(input())
    A = list(map(int, input().split()))
    d_num = [0] * (V + 1)
    linear = [0] * (V + 1) # linear[d] = ¥sum_{d|A_i} A_i
    quad = [0] * (V + 1) # quad[d] = ¥sum_{d|A_i} A_i^2
    for a in A:
        for d in div(a):
            d_num[d] += 1
            linear[d] += a
            quad[d] += a**2

    ans = 0
    for d in range(1, V + 1):
        if d_num[d] >= 2:
            ans += w(d) * (linear[d] ** 2 - quad[d]) // 2
            ans %= 998244353

    print(int(ans))

main()