#include<bits/stdc++.h>
using namespace std;
using ll=int_fast64_t;
#define fr(i,n) for(int i=0;i<(n);++i)
#define Fr(i,n) for(int i=1;i<=(n);++i)
#define ifr(i,n) for(int i=(n)-1;i>=0;--i)
#define iFr(i,n) for(int i=(n);i>0;--i)

struct modint{
    using i64=int_fast64_t;
    i64 a;
    static constexpr i64 MOD=998244353;
    modint(){a=0;}
    modint(i64 a_){
        a=a_%MOD;
        if(a<0) a+=MOD;
    }
    modint inv()const{
        i64 n=1,m=MOD-2,A=a;
        while(m){
            if(m&1)(n*=A)%=MOD;
            (A*=A)%=MOD;
            m>>=1;
        }
        modint y(n);
        return y;
    }
    bool operator==(const modint& x){
        return a==x.a;
    }
    bool operator!=(const modint& x){
        return a!=x.a;
    }
    modint& operator=(const modint& x){
        a=x.a;
        return *this;
    }
    modint operator+(const modint& x){
        modint y;
        y.a=a+x.a;
        if(y.a>MOD) y.a-=MOD;
        return y;
    }
    modint operator-(const modint& x){
        modint y;
        y.a=a-x.a;
        if(y.a<0) y.a+=MOD;
        return y;
    }
    modint operator*(const modint& x){
        modint y;
        y.a=(a*x.a)%MOD;
        return y;
    }
    modint operator/(const modint& x){
        modint y;
        y.a=(a*x.inv().a)%MOD;
        return y;
    }
    modint& operator+=(const modint& x){
        a+=x.a;
        if(a>=MOD) a-=MOD;
        return *this;
    }
    modint& operator-=(const modint& x){
        a-=x.a;
        if(a<0) a+=MOD;
        return *this;
    }
    modint& operator*=(const modint& x){
        (a*=x.a)%=MOD;
        return *this;
    }
    modint& operator/=(const modint& x){
        (a*=x.inv().a)%=MOD;
        return *this;
    }
};
istream& operator>>(istream &in,modint& x){
    int_fast64_t a_;
    in>>a_;
    modint y(a_);
    x=y;
    return in;
}
ostream& operator<<(ostream &out,const modint& x){
    out<<x.a;
    return out;
}
modint pwr(int_fast64_t a,int_fast64_t b){
    modint _;
    int_fast64_t n=1,A=a;
    while(b){
        if(b&1) (n*=A)%=modint::MOD;
        (A*=A)%=modint::MOD;
        b>>=1;
    }
    _.a=n;
    return _;
}

template <int_fast64_t mod,int_fast64_t pri> struct NTT{
    using i64 = int_fast64_t;
    i64 pw(i64 x,i64 r) {
        i64 ans=1;
        while(r){
            if(r&1) (ans*=x)%=mod;
            r>>=1;
            (x*=x)%=mod;
        }
        return ans;
    }
    i64 inv(i64 c){
        return pw(c,mod-2);
    }
    template <class T> void DFT(vector<T> a,vector<T>& c,i64 n,bool iv=false){
        a.resize(n);c.clear();c.resize(n);
        if(n==1){
            c=a;
            return;
        }
        i64 z=pw(pri,(mod-1)/n);
        if(iv) z=inv(z);
        vector<i64> pz(n+1,1),t(n);
        for(i64 i=1;i<n;i*=2) for(i64 j=0;j<i;++j) t[j]*=2,t[j+i]=t[j]+1;
        for(i64 i=0;i<n;++i) c[i]=a[t[i]],pz[i+1]=(pz[i]*z)%mod;
        for(i64 i=2,l=(n>>1);i<=n;i<<=1,l>>=1){
            a.swap(c);
            for(i64 j=0;j<l;++j){
                for(i64 k=0;k<(i>>1);++k){
                    c[i*j+k]=(a[i*j+k]+a[i*j+k+(i>>1)]*pz[l*k])%mod;
                    c[i*j+k+(i>>1)]=(a[i*j+k]+a[i*j+k+(i>>1)]*pz[l*(k+(i>>1))])%mod;
                }
            }
        }
        if(iv){
            i64 k=inv(n);
            for(i64 i=0;i<n;++i) (c[i]*=k)%=mod;
        }
    }
    template <class T> void mul(vector<T>& a,vector<T>& b,vector<T>& c){
        i64 n=1;
        while(n<a.size()+b.size()-1) n<<=1;
        vector<T> A,B,C(n);
        DFT(a,A,n);DFT(b,B,n);
        for(i64 i=0;i<n;++i) C[i]=(A[i]*B[i])%mod;
        DFT(C,c,n,true);
    }
};

template <class T> struct conv_gcd{
    void zeta(vector<T>&a){
        size_t n=a.size();
        for(size_t d=1;d<n;++d) for(size_t i=d*2;i<n;i+=d) a[d]+=a[i];
    }
    void mevius(vector<T>&a){
        size_t n=a.size();
        for(size_t d=n-1;d>0;--d) for(size_t i=d*2;i<n;i+=d) a[d]-=a[i];
    }
    void conv(vector<T> a,vector<T> b,vector<T>&c){
        size_t n=a.size();
        zeta(a);zeta(b);
        c.clear();c.resize(n);
        for(size_t i=1;i<n;++i) c[i]=a[i]*b[i];
        mevius(c);
    }
};

int main(){
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    istream& in(cin);
    ostream& out(cout);
    int n,a;
    vector<modint> b(1000001),c;
    in>>n;
    modint ans{};
    fr(i,n) in>>a,b[a]+=a,ans-=a;
    conv_gcd<modint> con;
    con.conv(b,b,c);
    Fr(i,1000000) ans+=c[i]/i;
    cout<<ans/2<<endl;
}

Measured memory_bytes: 31616