#include <algorithm>
#include <cfloat>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <functional>
#include <iostream>
#include <map>
#include <memory>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
#include <bits/stdc++.h>
 
using namespace std;
 
#define sz size()
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define all(c) (c).begin(), (c).end()
#define rep(i,a,b) for(long long i=(a);i<(b);++i)
#define clr(a, b) memset((a), (b) ,sizeof(a))
 
#define MOD 1000000007

int N;
int memo[101][101][101];
long double dp[101][101][101];

long double f(int a, int b, int c){
  if(a==0&&b==0&&c==0)return 0.;
  if(memo[a][b][c]!=-1)return dp[a][b][c];
  long double ret = 0.;
  if(a-1>=0)ret += 1.*a/(a+b+c)*f(a-1,b,c);
  if(b-1>=0)ret += 1.*b/(a+b+c)*f(a+1,b-1,c);
  if(c-1>=0)ret += 1.*c/(a+b+c)*f(a,b+1,c-1);
  ret+=1.*N/(a+b+c);
  memo[a][b][c] = 1;
  return dp[a][b][c] = ret;
}

int main(){
  clr(memo,-1);
  cin>>N;
  int a=0,b=0,c=0;
  rep(i,0,N){
    int d;
    cin>>d;
    if(d==2)a++;
    if(d==1)b++;
    if(d==0)c++;
  }
  cout << fixed << setprecision(9) << f(a,b,c) << endl;
  return 0;
}