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# (Mono 4.6.2.0) (judge verdict: Time Limit Exceeded)

namespace AGC038.C
{
    using System;
    using static System.Console;
    using System.Collections.Generic;
    using System.Linq;

    public class Program
    {
        public static int Amari { get; } = 998244353;
        public static long Lcm(long a, long b) => a / Gcd(a, b) * b;

        public static long Gcd(long a, long b)
        {
            if (a < b)
            {
                var temp = a;
                a = b;
                b = temp;
            }
            var r = a % b;
            while (r != 0)
            {
                a = b;
                b = r;
                r = a % b;
            }
            return b;
        }


        static void Main(string[] args)
        {
            var N = ReadInt();
            var a = ReadInputsAsInt();

            WriteLine(Solve(a));
        }

        //  https://atcoder.jp/contests/abc020/tasks/abc020_d
        // unckecked version
        public static long Solve(List<int> a)
        {


            long sum = 0;
            for (int i = 0; i <= a.Count - 2; i++)
            {
                var ai = a[i];
                var dictionary = new Dictionary<int, List<long>>();

                for (int j = i + 1; j <= a.Count - 1; j++)
                {

                    int _jouyo = a[j] % ai;
                    if (_jouyo == 0) _jouyo = ai;
                    if (dictionary.ContainsKey(_jouyo))
                    {
                        dictionary[_jouyo].Add(a[j]);
                    }
                    else
                    {
                        dictionary.Add(_jouyo, new List<long> { a[j] });
                    }
                    //sum += LCM(a[i], a[j]);
                    //sum %= 998244353;
                }
                foreach (var kv in dictionary)
                {
                    sum += kv.Value.Sum() / Gcd(kv.Value[0], ai) * ai;
                    sum %= Amari;
                }
            }
            return sum;

        }

        static List<int> ReadInputsAsInt() => ReadLine().Split(' ').Select(x => int.Parse(x)).ToList();

        static int ReadInt() => int.Parse(ReadLine());
    }
}