// Slower C++ solution:
#include<bits/stdc++.h>

#define ll long long

#define N 100005

using namespace std;

int main()

{

	ll n;

	ll a[N];

	memset(a,0,sizeof(a));

	cin>>n;

	for(ll i = 0;i<n;i++)

	{

		cin>>a[i];

	}

	sort(a,a+n);

	ll x,y;

	int flag = 0; 

	ll  i ,j;

	for(i = n-1;i>=0;i--)

	{

		if(a[i]==a[i-1])

		{

			i--;

			x =a[i];

			for(j=i-1;j>=0;j--)

			{

				if(a[j]==a[j-1])

				{

					y = a[j];

					flag = 1;

					break;

				}

			}

			break;

		 } 

	}

	if(flag==0) cout<<"0"<<endl;

	else

	cout<<x*y<<endl;

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 1.8330737099738517x):
///CCCC

/*

#include<stdio.h>

#include<string.h>

#include<iostream>

#include<algorithm>

using namespace std;

int mp[1010][1010];

int sum[1010][1010];

int main()

{

    int t,p=1;

    scanf("%d",&t);

    while(t--)

    {

        int r,c;

        scanf("%d %d",&r,&c);

        memset(mp,0,sizeof(mp));

        memset(sum,0,sizeof(sum));

        for(int i=1; i<=r; i++)

        {

            for(int j=1; j<=c; j++)

            {

                scanf("%d",&mp[i][j]);

            }

        }

        for(int i=1; i<=r; i++)

        {

            for(int j=1; j<=c; j++)

            {

                int max1;

                max1=max(mp[i+1][j],mp[i][j+1]);

                sum[r][c]+=max(mp[i+1][j+1],max1);

                 printf("%d***\n",sum[r][c]);

            }

        }

        printf("Scenario #%d:\n",p++);

        printf("%d\n",sum[r][c]);

        printf("\n");

    }

    return 0;

}*/

///EEE

/*

#define MAX_INT 0x3f3f3f3f

#define MIN_INT -MAX_INT

int v[4100],w[4100];

int dp[13000];

int main()

{

    int n,m;

    scanf("%d %d",&n,&m);

    for(int i=0;i<n;i++)

    scanf("%d %d",&v[i],&w[i]);

    for(int i=0;i<n;i++)

    {

        for(int j=m;j>=v[i];j--)

        {

            dp[j]=max(dp[j],dp[j-v[i]]+w[i]);///啥意思？

        }

    }

    printf("%d\n",dp[m]);

    return 0;

}

*/



///FFFF

/*

int main()

{

    for(int j=m;j>=v[i];j--)

        {

            dp[j]=max( dp[j],dp[ j-v[i] ]+w[i] );

        }

    for(int j=v[i];j<=m;j++)

    {

        dp[i][j]=max( dp[j],dp[ j-v[i] ]+w[i] );

    }

    return 0;

}



*/

///DDDD

/*int a[41000];

int dp[41000];

int main()

{



    int T;

    scanf("%d",&T);

    while(T--)

    {

        int n;

        scanf("%d",&n);

        memset(a,0,sizeof(a));

        memset(dp,0,sizeof(dp));

        for(int i=0;i<n;i++)

            scanf("%d",&a[i]);

        int j=0;

        dp[0]=a[0];



        for(int i=1;i<n;i++)

        {

            if(a[i]>dp[j])

            {

                j++;

                dp[j]=a[i];

            }

            else

            {

                int pow=lower_bound( dp,dp+j,a[i] )-dp;

                dp[pow]=a[i];

                //printf("%d&&\n",pow);

            }

        }

        printf("%d\n",j+1);

    }

    return 0;

}*/

#include<stdio.h>

#include<string.h>

#include<iostream>

#include<algorithm>

#define ll long long

using namespace std;

ll n,a[100100],sum=1,k=0;

int main()

{

    scanf("%lld",&n);

    for(int i=1; i<=n; i++)

    {

        scanf("%lld",&a[i]);

    }

    sort(a+1,a+1+n);

    for(int i=n; i>=2; i--)

    {

        if(a[i]==a[i-1])

        {

            sum*=a[i];

            i-=1;

            k++;

            //printf("%d***\n",k);

            if(k==2) break;

        }

    }

    if(k<2) printf("0\n");

    else  printf("%lld\n",sum);

    return 0;

}