/** Which of the favors of your Lord will you deny ? **/

#include<bits/stdc++.h>
using namespace std;

#define LL long long
#define PII pair<int,int>
#define PLL pair<LL,LL>
#define MP make_pair
#define F first
#define S second

#define ALL(x) (x).begin(), (x).end()
#define DBG(x) cerr << __LINE__ << " says: " << #x << " = " << (x) << endl
#define READ        freopen("alu.txt", "r", stdin)
#define WRITE       freopen("vorta.txt", "w", stdout)

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

template<class TIn>using indexed_set = tree<TIn, null_type, less<TIn>,rb_tree_tag, tree_order_statistics_node_update>;

/**

PBDS
-------------------------------------------------
1) insert(value)
2) erase(value)
3) order_of_key(value) // 0 based indexing
4) *find_by_order(position) // 0 based indexing

**/

template<class T1, class T2>
ostream &operator <<(ostream &os, pair<T1,T2>&p);
template <class T>
ostream &operator <<(ostream &os, vector<T>&v);
template <class T>
ostream &operator <<(ostream &os, set<T>&v);

inline void optimizeIO()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
}

const int nmax = 3e2+7;
const LL LINF = 1e17;

template <class T>
string to_str(T x)
{
    stringstream ss;
    ss<<x;
    return ss.str();
}

//bool cmp(const PII &A,const PII &B)
//{
//
//}

double p[nmax][nmax][nmax]; /** probability **/
double ev[nmax][nmax][nmax]; /** expected value **/

int main()
{
    optimizeIO();

    int n;
    cin>>n;

    vector<int>cnt(4,0);

    for(int i=0; i<n; i++)
    {
        int x;
        cin>>x;
        cnt[x]++;
    }

    /// (a,b,c) -> (0,0,0)

    p[cnt[1]][cnt[2]][cnt[3]] = 1;

    for(int c=n; c>=0; c--)
    {
        for(int b=n; b>=0; b--)
        {
            for(int a=n; a>=0; a--)
            {
                if(a==0 && b==0 && c==0)
                    continue;

                if(a+b+c>n)
                    continue;

                double p_waste = (double)(n-(a+b+c))/n;
                /// ev_waste = p_waste + p_waste^2 + ....
                double ev_waste = p_waste/(1-p_waste) + 1 ; /** +1 is because I also need to move to some other state other than wasting **/

                ev[a][b][c] += ev_waste * p[a][b][c];

                /// remove 1 from 1's pile
                if(a!=0)
                {
                    double p_here = (double)a/(a+b+c); /** probability of coming to this state **/
                    p[a-1][b][c] += p[a][b][c] * p_here;
                    ev[a-1][b][c] += ev[a][b][c] * p_here;
                }

                /// remove 1 from 2's pile
                if(b!=0)
                {
                    double p_here = (double)b/(a+b+c); /** probability of coming to this state **/
                    p[a+1][b-1][c] += p[a][b][c] * p_here;
                    ev[a+1][b-1][c] += ev[a][b][c] * p_here;
                }

                /// remove 1 from 3's pile
                if(c!=0)
                {
                    double p_here = (double)c/(a+b+c); /** probability of coming to this state **/
                    p[a][b+1][c-1] += p[a][b][c] * p_here;
                    ev[a][b+1][c-1] += ev[a][b][c] * p_here;
                }
            }
        }
    }


    cout<<setprecision(10)<<ev[0][0][0]<<endl;

    return 0;
}

/**

**/

template<class T1, class T2>
ostream &operator <<(ostream &os, pair<T1,T2>&p)
{
    os<<"{"<<p.first<<", "<<p.second<<"} ";
    return os;
}
template <class T>
ostream &operator <<(ostream &os, vector<T>&v)
{
    os<<"[ ";
    for(int i=0; i<v.size(); i++)
    {
        os<<v[i]<<" " ;
    }
    os<<" ]";
    return os;
}

template <class T>
ostream &operator <<(ostream &os, set<T>&v)
{
    os<<"[ ";
    for(T i:v)
    {
        os<<i<<" ";
    }
    os<<" ]";
    return os;
}




Measured memory_bytes: 222752