#include<bits/stdc++.h>
using namespace std;
const int N=305;
int a,b,c,tmp;
double n,dp[N][N][N];
int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>tmp;
		if(tmp==1)a++;
		else if(tmp==2)b++;
		else c++;
	}
	for(int i=0;i<=n;i++)
	{
		for(int j=0;j<=n;j++)
		{
			for(int k=0;k<=n;k++)
			{
				if(!i&&!j&&!k)continue;
				if(i)dp[i][j][k]+=dp[i-1][j+1][k]*i;
				if(j)dp[i][j][k]+=dp[i][j-1][k+1]*j;
				if(k)dp[i][j][k]+=dp[i][j][k-1]*k;
				dp[i][j][k]=dp[i][j][k]/(i+j+k);
				dp[i][j][k]+=n/(i+j+k);
			}
		}
	}
	cout<<fixed<<setprecision(12)<<dp[c][b][a]<<endl;
	return 0;
}
#include<bits/stdc++.h>
using namespace std;

long long dp[200003][3];
long long ara[200003],n;

long long solve(long long idx,long long sta,long long lim)
{

    long long rr=lim-sta;

    if(idx+rr==n)return ara[idx];
    else if(dp[idx][sta]!=-1)return dp[idx][sta];
    else
    {

        long long p;

        p=ara[idx]+solve(idx+2,sta,lim);

        if(sta+1<=lim)
        {
            p=max(p,ara[idx]+solve(idx+3,sta+1,lim));
        }

        dp[idx][sta]=p; return dp[idx][sta];

    }


}

int main()
{

    long long a,i,j,st=1,ans=LLONG_MIN;

    scanf("%lld",&n);

    for(i=1;i<=n;i++)
    {
        scanf("%lld",&a);  ara[i]=a; dp[i][0]=-1; dp[i][1]=-1; dp[i][2]=-1;
    }


    if(n%2==1)
    {
        ans=max(ans,solve(1,0,2));

        st=2;
    }

    if(st==2){memset(dp,-1,sizeof dp);}
    ans=max(ans,solve(st,0,1));

    memset(dp,-1,sizeof dp);
    ans=max(ans,solve(st+1,0,0));

    printf("%lld\n",ans);


    return 0;
}
