#include <iostream>
#include <vector>
//#include <string>
//#include <algorithm>
//#include <math.h>
#include <queue>
//#include <stack>
#include <iomanip>

// sometimes used
//#include <set>
//#include <map>
//#include <numeric>
//#include <list>
//#include <deque>
//#include <unordered_map>

typedef long long LL;
typedef long double LD;
using namespace std;
 
//#define MOD 1000000007
//#define MOD 998244353
//#define MAX 200100
//#define NIL -1
//#define INFTY 1000000000000000000

vector<vector<vector<LD>>> abc(101, vector<vector<LD>>(101, vector<LD>(101, 0)));
vector<vector<vector<bool>>> is_visit(101, vector<vector<bool>>(101, vector<bool>(101, false)));

void bfs(pair<LL, pair<LL, LL>> s){
    queue<pair<LL, pair<LL, LL>>> q;
    q.push(s);
    pair<LL, pair<LL, LL>> u;
    while(!q.empty()){
        u=q.front();
        q.pop();
        LL a=u.first;
        LL b=u.second.first;
        LL c=u.second.second;
        //cout << a << " " << b << " " << c << endl;
        if(a!=0){
            abc[a+1][b][c]+=abc[a][b][c]*a/(a+b+c);
            //cout << a+1 << " " << b << " " << c << endl;
            if(a+1<100 && is_visit[a+1][b][c]==false){
                is_visit[a+1][b][c]=true;
                q.push(make_pair(a+1, make_pair(b,c)));
            }
        }
        if(b!=0){
            abc[a][b+1][c]+=abc[a][b][c]*b/(a+b+c);
            if(b+1<100 && is_visit[a][b+1][c]==false){
                is_visit[a][b+1][c]=true;
                q.push(make_pair(a, make_pair(b+1,c)));
            }
        }
        if(c!=0){
            abc[a][b][c+1]+=abc[a][b][c]*c/(a+b+c);
            //cout << abc[a][b][c] << " " << abc[a][b][c+1] << endl;
            if(c+1<100 && is_visit[a][b][c+1]==false){
                is_visit[a][b][c+1]=true;
                q.push(make_pair(a, make_pair(b,c+1)));
            }
        }
    }
}


int main(){
    LL a;
    LL b;
    LL c;
    cin >> a >> b >> c;
    abc[a][b][c]=1;
    is_visit[a][b][c]=true;
    bfs(make_pair(a, make_pair(b, c)));
    LD ans=0;
    for(LL i=0; i<100; i++){
        for(LL j=0; j<100; j++){
            if(i<b || j<c){
                continue;
            }
            ans+=abc[100][i][j]*(LD)(100+i+j-a-b-c);
        }
    }

    for(LL i=0; i<100; i++){
        for(LL j=0; j<100; j++){
            if(i<a || j<c){
                continue;
            }
            ans+=abc[i][100][j]*(LD)(100+i+j-a-b-c);
        }
    }

    for(LL i=0; i<100; i++){
        for(LL j=0; j<100; j++){
            if(i<a || j<b){
                continue;
            }
            ans+=abc[i][j][100]*(LD)(100+i+j-a-b-c);
        }
    }

    cout << setprecision(12) << ans << endl;

    return 0;
}

#include <bits/stdc++.h>
#define fi first
#define se second
#define ll long long
#define ld long double
#define pb push_back
#define pf push_front
#define pi 3.14159265358979323846
const ll INF=1e18;
const ll N=2e5+5;
const ll MOD=1e9+7;
using namespace std;
double dp[105][105][105];

ll POWER(ll base,ll expo)
{
    ll ret=1;
    while(expo)
    {
        if(expo&1)ret=ret*base;
        expo>>=1;
        base=base*base;
    }
    return ret;
}
ld fun(ll a,ll b,ll c)
{
    if(a==100 || b==100 || c==100)
        return 0;
    if(dp[a][b][c]!=-1)return dp[a][b][c];
    double tot=a+b+c;
    double ans=1+(a/tot)*fun(a+1,b,c)+(b/tot)*fun(a,b+1,c)+(c/tot)*(fun(a,b,c+1));
    return dp[a][b][c]=ans;
}
int main()
{
    ll test_case=1; //cin>>test_case;
    while(test_case--)
    {
        ll a,b,c;
        for(ll i=0;i<=100;i++){
            for(ll j=0;j<=100;j++){
                for(ll k=0;k<=100;k++)
                    dp[i][j][k]=-1;
            }
        }
        cin>>a>>b>>c;
        double ans=fun(a,b,c);
        cout<<fixed<<setprecision(12)<<ans;
    }
    return 0;
}
