// Gaurav Nuti
 
#include<bits/stdc++.h>
using namespace std;
 
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef vector<pii > vii;
typedef vector<pll > vll;
#define pb push_back
#define mp make_pair 
#define ar array
#define mod 1000000007
#define F first
#define S second
#define p(s) cout<<(s)<<endl
#define p2(s, t) cout << (s) << " " << (t) << endl
#define For(i, a, b) for(__typeof (a) i=a; i<=b; i++)
#define inp_arr(a,n) for(__typeof (n) i=0; i<n; ++i) {cin>>a[i];}
#define debug_arr(a,n) {{for(__typeof (n) i=0; i<n; ++i) {cout<<a[i]<<" ";}cout<<"\n";}}
#define INF 1e9 

ll power(ll x, ll y) 
{ 
    ll res = 1;   
    while (y > 0) { 
        if (y & 1) 
            res = (res*x)%mod; 
        y = y>>1;
        x = (x*x)%mod; 
    } 
    return res%mod; 
}

ll power_without_mod(ll x, ll y) 
{ 
    ll res = 1;   
    while (y > 0) { 
        if (y & 1) 
            res = (res*x); 
        y = y>>1;
        x = (x*x); 
    } 
    return res; 
}

bool comparep(pair<ll, ll> i1, pair<ll, ll> i2){
	return (i1.S < i2.S);
} 

ll modInverse(ll a)
{
    return power(a , mod - 2);
}

// vector< vector<ll>> graph;
// vector<bool> visited;
// vector<ar<ll,2>> dp;

// void bfs(int u){
//     queue<ll> q;
//     q.push(u);
//     visited[u] = 1;
//     while(!q.empty()){
//         int u1 = q.front();
//         q.pop();
//         for(auto i = graph[u1].begin();i!=graph[u1].end();i++){
//             num[*i]--;
//             dist[*i] = max(dist[u1] + 1,dist[*i]);
//             if(!visited[*i] && num[*i] == 0){
//                 visited[*i] = 1;
//                 q.push(*i);
//             }
//         }
//     }
// }

// void dfs(ll u){
//     visited[u] = true;
//     if(graph[u].size() == 0){
//         dp[u][0] = 1;
//         dp[u][1] = 1;
//         return;
//     }

//     dp[u][0] = 1;
//     dp[u][1] = 1;
//     for(auto i = graph[u].begin();i!=graph[u].end();i++){
//         if(!visited[*i]){
//             dfs(*i);
//             dp[u][0] *= (dp[*i][0] + dp[*i][1]);
//             dp[u][0] %= mod;
//             dp[u][1] *= (dp[*i][0]);
//             dp[u][1] %= mod;
//         }
//     }
// }

// int next_lunlun(ll n){
//     vector<int> digits;
//     while(n){
//         digits.pb(n%10);
//         n /= 10;
//     }
//     // reverse(digits.begin(),digits.end());
//     ll num_digits = digits.size(); 
//     int count_9 = 0;
//     for(int i: digits)
//         if(i == 9)
//             count_9++;
//     if(count_9 == num_digits)
//         return ;
//     for(int i=0;i<(num_digits-1);i++){
//         if(digits)
//     }
// }

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
 
    #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout); 
    #endif  
	
    ll t;
    // cin>>t;
    t = 1;
    for(ll z=0;z<t;z++){
        int n;
        cin>>n;
        int a[n];
        inp_arr(a,n);
        int o[3] = {0};
        for(int i = 0;i<n;i++)
            o[a[i] - 1] += 1;

        double dp[n+1][n+1][n+1] = {0};
        // dp[o[0]][o[1]][o[2]] = 1;

        // for(int z = n;z >= 0;z--){
        //     for(int j = n; j >=0 ; j--){
        //         for(int i = n;i >= 0;i--){
        //             int tot = (i+j+z);
        //             if(i)
        //                 dp[i-1][j][z] += i/tot*dp[i][j][z];
        //             if(j && (i+1) <= n)
        //                 dp[i+1][j-1][z] += j/tot*dp[i][j][z];
        //             if(z && (j+1)<=n)
        //                 dp[i][j+1][z-1] += z/tot*dp[i][j][z];
        //         }   
        //     }
        // }

        // dp[1][0][0] = n;
        for(int k = 0; k<=n; k++){
            for(int j = 0; j<=n ; j++){
                for(int i=0;i<=n;i++){
                    int tot = i+j+k;
                    if(tot == 0)
                        continue;
                    if(tot <= n){
                        double p1 = (double)i/n;
                        double p2 = ((double)j)/n;
                        double p3 = (double)k/n;
                        double p4 = (double)(n - tot)/n;
                        // cout<<p3<<"\n";
                        if(i)
                            dp[i][j][k] += (1 + dp[i-1][j][k])*p1;
                        if(j)
                            dp[i][j][k] += (1 + dp[i+1][j-1][k])*p2;
                        if(k)
                            dp[i][j][k] += (1 + dp[i][j+1][k-1])*p3;
                        dp[i][j][k] += p4;
                        dp[i][j][k] /= (1-p4);
                    } 
                }
            }
        }
        cout<<setprecision(20)<<dp[o[0]][o[1]][o[2]];
    }
}

Measured memory_bytes: 216864