#include <sstream>
#include<complex>
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<vector>
#include<set>
#include<ctime>
#include<cmath>
#include<map>
#include<unordered_map>
#include<stack>
#include<random>
#include <chrono>
#include<queue>
#include<list>
#include<math.h>
#include<bitset>
#include<fstream>
#include<random>
#include<cmath>
using namespace std;
#define ll long long int
#define ld long double
#define key pair<ld,ld>
#define ii pair<int,int>
#define si set<int>
#define vii vector<pair<int,int> >
#define vi vector<int>
#define vll vector<ll>
#define vb vector<bool>
#define vvi vector<vector<int> >
#define vs vector<string>
#define all(v) v.begin(),v.end()
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define nu 100001
#define mul(x,y) ((ll)(x)*(y))%mod
#define tr(c,i) for(auto i = (c).begin(); i != (c).end(); i++)
#define fastio  ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define forn(i, n) for (int i = 0; i < int(n); i++)
const ll INF=9223372036854775807;
const ll mod=(ll)1e9+7;
#pragma GCC target ("avx2")
//#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
//Naive Solution as follows...

int  MOD(int  a, int  b)
{
    if(a>b)
        return a-b;
    else
        return b-a;
}
ll  max3(ll  a,ll  b, ll  c)
{
    return max(c,max(a,b));
}
ll min3(ll  a,ll  b,ll  c)
{
    return min(a,min(b,c));
}
ll  power(ll  x,ll  y,ll mod1)
{
    ll res = 1;
    while (y > 0)
    {
        if (y & 1)
            res = (res*x)%mod1;
        y = y>>1;
        x = (x*x)%mod1;
    }
    return res;
}
ll logg(ll  a)
{
    ll  x=0;
    while(a>1)
    {
        x++;
        a/=2;
    }
    return x;
}
ll  gcd(ll  a,ll   b)
{
    if (a == 0)
        return b;
    return gcd(b % a, a);
}
ll abso(ll x)
{
    if(x<0)
    {
        return -x;
    }
    return x;
}
ll ceiling (ll  a,ll  b)
{
    if(a%b==0)
    {
        return a/b;
    }
    else
    {
        return a/b+1;
    }
}
ll modinv(ll x,ll p)
{
    return power(x,p-2,p);
}
struct point
{
    ll x;ll y;
};
ll cross(point a,point b)
{
    return a.x*b.y-b.x*a.y;
}
bool ccw(point p1,point p2)
{
    /* point n1;n1.x=p1.x-p0.x;n1.y=p1.y-p0.y;
     point n2;n2.x=p2.x-p0.x;n2.y=p2.y-p0.y;*/
    if(cross(p1,p2)>0)
    {
        return true;
    }
    else
    {
        return false;
        //No need to worry about cross=0 case in this question;
    }
}
void ccw_sort(vector<point> &v)
{
    vector<point> v1,v2;
    for(int i=0;i<v.size();i++)
    {
        if(v[i].y>0)
        {
            v1.push_back(v[i]);
        }
        else
        {
            v2.push_back(v[i]);
        }
    }
    sort(all(v1),ccw);
    sort(all(v2),ccw);
    for(int i=0;i<v2.size();i++)
    {
        v1.push_back(v2[i]);
    }
    v=v1;
}
bool check(int x,int y,int n,int m)
{
    if(x>=0&&y>=0&x<n&&y<m)
    {
        return true;
    }
    else
    {
        return false;
    }
}
using cd = complex<double>;
const double PI = acos(-1);
void fft(vector<cd> & a, bool invert) {
    int n = a.size();

    for (int i = 1, j = 0; i < n; i++) {
        int bit = n >> 1;
        for (; j & bit; bit >>= 1)
            j ^= bit;
        j ^= bit;

        if (i < j)
            swap(a[i], a[j]);
    }

    for (int len = 2; len <= n; len <<= 1) {
        double ang = 2 * PI / len * (invert ? -1 : 1);
        cd wlen(cos(ang), sin(ang));
        for (int i = 0; i < n; i += len) {
            cd w(1);
            for (int j = 0; j < len / 2; j++) {
                cd u = a[i+j], v = a[i+j+len/2] * w;
                a[i+j] = u + v;
                a[i+j+len/2] = u - v;
                w *= wlen;
            }
        }
    }

    if (invert) {
        for (cd & x : a)
            x /= n;
    }
}
vector<ll> multiply(vector<ll> const& a, vector<ll> const& b) {
    vector<cd> fa(a.begin(), a.end()), fb(b.begin(), b.end());
    int n = 1;
    while (n < a.size() + b.size())
        n <<= 1;
    fa.resize(n);
    fb.resize(n);

    fft(fa, false);
    fft(fb, false);
    for (int i = 0; i < n; i++)
        fa[i] *= fb[i];
    fft(fa, true);

    vector<ll> result(n);
    for (int i = 0; i < n; i++)
        result[i] = round(fa[i].real());
    return result;
}

int main()
{
    fastio;
    int n;
    cin>>n;
    vll a(n);
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    sort(all(a));
    ll md=200003;
    ll m=1;
    map<ll,ll> g,g1;
    for(int i=0;i<md-1;i++)
    {
        g[m]=i;
        g1[i]=m;
        m=2*m;
        m=m%md;
    }
    for(int i=md-1;i<2*md+1;i++)
    {
        g1[i]=m;
        m=2*m;
        m=m%md;
    }
    vll arr(md+2);
    
    for(int i=0;i<n;i++)
    {
        arr[a[i]]++;
    }
    vll poly(md+1);
    for(int i=1;i<md;i++)
    {
        poly[g[i]]=arr[i];
    }
    auto poly1=poly;
    auto res=multiply(poly,poly1);
    ll ans=0;
    for(int i=0;i<res.size();i++)
    {
        ans=ans+(res[i])*g1[i];
        
    }
    for(int i=0;i<n;i++)
    {
        ans=ans-((a[i]*a[i])%md);
    }
    ans=ans/2;
    cout<<ans<<endl;
}


Measured memory_bytes: 67744