#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<stack>
#include<unordered_set>
#include<cmath>
#include<tuple>
#include<numeric>
#include<iterator>
#include<set>
#include<unordered_map>
#include<map>
#include<queue>
#include<cstring>
#include<stdio.h>
#include<fstream>
#include<iomanip>

#define fastio ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
#define foru(i , a , b) for(ll i = a ; i < b ; i++)
#define ford(i , a , b) for(ll i = a ; i >= b ; i--)
#define ain(a , n) for(ll i = 0 ; i < n ; i++) cin >> a[i]
#define aout(a , n) for(ll i = 0 ; i < n ; i++) cout << a[i] << " "
#define M 1000000007
#define mp make_pair
#define mt make_tuple
#define cend cout << "\n"
#define all(x) x.begin() , x.end()
#define aout2(a , n , m) for(ll i = 0 ; i < n ; i++){for(ll j = 0 ; j < m ; j++){cout << a[i][j] << " ";} cout << endl;}
#define ain2(a , n , m) for(ll i = 0 ; i < n ; i++){for(ll j = 0 ; j < m ; j++){cin >> a[i][j];}}
#define ff first
#define ss second
#define mset(a , b) memset(a , b , sizeof(a))
#ifndef ONLINE_JUDGE
#define dbg(a) cerr << #a << ": "; _print(a); cerr << endl;
#else
#define dbg(a) // No more TLEs
#endif

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ldb;
typedef vector <int> vi;
typedef vector <ll> vll;
typedef vector <char> vch;
typedef vector <string> vs;
typedef set <ll> sll;
typedef multiset <ll> msll;
typedef pair <ll , ll> pll;
typedef vector <pair <ll , ll>> vpll;
void _print(ll t){cerr<<t;}
void _print(int t){cerr<<t;}
void _print(string t){cerr<<t;}
void _print(char t){cerr<<t;}
void _print(ldb t){cerr<<t;}
template <class T, class V> void _print(pair <T, V> p);
template <class T> void _print(vector <T> v);
template <class T> void _print(set <T> v);
template <class T, class V> void _print(map <T, V> v);
template <class T, class V> void _print(pair <T, V> p){cerr<< "{";_print(p.ff);cerr<<",";_print(p.ss);cerr<<"}";}
template <class T> void _print(vector <T> v){cerr<<"[ ";for(T i: v){_print(i);cerr<<" ";}cerr << "]";}
template <class T> void _print(set <T> v){cerr<<"[ ";for(T i: v){_print(i);cerr<<" ";}cerr << "]";}
template <class T, class V> void _print(map <T, V> v){cerr<<"[ ";for(auto i: v){_print(i);cerr<<" ";}cerr << "]";}

/*----------------------------- # --- MATH ALGORITHMS --- # -----------------------------*/

template <class T> T gcd(T a , T b){ while(a != 0){T temp = a; a = b % a; b = temp;}return b;}
template <class T> T egcd(T a , T b , T &x , T &y){T gcd , xt , yt;if(a == 0){gcd = b;x = 0 , y = 1;}else {gcd = egcd(b % a , a , xt , yt);x = yt - (b/a)*xt; y = xt;}return gcd;}
template <class T> T expo(T base , T exp , T mod){T res = 1;base = base % mod;while (exp > 0){if (exp & 1)res = (res*base) % mod;exp = exp>>1;base = (base*base) % mod;}return res;}
template <class T> T modinv(T a , T mod){T x , y; egcd<T>(a , mod , x , y);while(x < 0) x += mod; while(x >= mod) x -= mod; return x;}
template <class T> T modinvfermat(T a , T mod){return expo<T>(a , mod - 2 , mod);}
template <class T> bool rev(T a , T b){return a > b;}
template <class T> ll maxpower(T a , T b){ll ans = 0;while(a > 0 && a % b == 0){ans++;a /= b;}return ans;}
template <class T> T mceil(T a, T b){if(a % b == 0) return a/b; else return a/b + 1;}
template <class T> T lcm(T a, T b){return (a*b)/gcd<T>(a, b);}

/*----------------------------- # --- MAIN CODE --- # -----------------------------*/
vll a;
ll n;
vector <vector <vector <double>>> dp;
double f(ll i, ll j, ll k){
    double a = i - 1 >= 0 ? dp[i - 1][j][k] : 0, b = j - 1 >= 0 ? dp[i + 1][j - 1][k] : 0, c = k - 1 >= 0 ? dp[i][j + 1][k - 1] : 0;
    double nn = (double)n;
    if(i == 0 and j == 0 and k == 0) return 1;
    if(i - 1 >= 0 and dp[i - 1][j][k] == -1) a = dp[i - 1][j][k] = f(i - 1, j, k);
    if(j - 1 >= 0 and dp[i + 1][j - 1][k] == -1) b = dp[i + 1][j - 1][k] = f(i + 1, j - 1, k);
    if(k - 1 >= 0 and dp[i][j + 1][k - 1] == -1) c = dp[i][j + 1][k - 1] = f(i, j + 1, k - 1);
    dp[i][j][k] = (nn/(i + j + k))*(1 + (a*i)/nn + (b*j)/nn + (c*k)/nn);
    return dp[i][j][k];
}
int main() {
    fastio;

    cin >> n; a.resize(n); ain(a, n);
    dp.resize(n + 1, vector <vector <double>>(n + 1, vector <double>(n + 1, -1)));
    ll one = 0, two = 0, three = 0;
    if(n == 1){
        cout << a[0]; return 0;
    }
    foru(i, 0, n){
        if(a[i] == 1) one++;
        else if(a[i] == 2) two++;
        else three++;
    }
//    foru(i, 0, n + 1){
//        foru(j, 0, n + 1){
//            foru(k, 0, n + 1){
//                if(i == 0 or j == 0 or k == 0) dp[i][j][k] = 0;
//            }
//        }
//    }
    dp[0][0][0] = 0;
    cout << setprecision(15);
    cout << f(one, two, three);
}









Measured memory_bytes: 216960