#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> // Common file
#include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update
using namespace __gnu_pbds;
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int inf=0x3f,INF=0x3f3f3f3f; const ll LLINF=0x3f3f3f3f3f3f3f3f;
#define sz(x) (int)x.size()
#define af(x) x.begin(), x.end()
#define ms(x, y) memset(x, y, sizeof x);
#define fil(x, y) fill(af(x), y);
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define f first
#define s second	
#define lc i << 1
#define rc i << 1 | 1
const int mod = 1e9 + 7;
ll fpow(ll a, ll b){ll ret=1;while(b){if(b&1)ret=ret*a%mod;a=a*a%mod,b>>=1;}return ret;}
ll inv(ll x){return x ? fpow(x, mod - 2) : 1;}
void madd(int &a, int b){a+=b;if(a>=mod)a-=mod;}
void msub(int &a, int b){a+=mod-b;if(a>=mod)a-=mod;}
const int MM = 2e5 + 5;
void solve(){
	int a, b, c;
	cin >> a >> b >> c;
	vector<vector<vector<double>>> dp(101, vector<vector<double>>(101, vector<double>(101)));
	function<double(int,int,int)> rec = [&](int x, int y, int z){	
		if (x == 100 || y == 100 || z == 100) return 0.0;
		if (dp[x][y][z] != 0.0) return dp[x][y][z];
		int t = x + y + z;
		return dp[x][y][z] = 1.0*x/t*(1.0+rec(x+1,y,z)) + 1.0*y/t*(1.0+rec(x,y+1,z)) + 1.0*z/t*(1.0+rec(x,y,z+1));
	};
	cout << fixed << setprecision(10) << rec(a, b, c) << '\n';
}

int main(){
	cin.sync_with_stdio(0); cin.tie(0); cout.tie(0);
	int t = 1;
	//cin >> t;
	while(t--) solve();
}

#include<functional>
#include<algorithm>
#include<iostream>
#include<iomanip>
#include<cstring>
#include<cstdlib>
#include<utility>
#include<string>
#include<cstdio>
#include<vector>
#include<bitset>
#include<cmath>
#include<ctime>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<set>
using namespace std;
const int inf=2147483647,dx[]={-1,0,1,0},dy[]={0,-1,0,1};// 上 左 下 右
const int N=100005,M=1000005,K=200005,mod=1000000007;
const long long llinf=9223372036854775807ll;
//int & long long
double dp[105][105][105],ans;
int a,b,c;
int main()
{
	cin>>a>>b>>c;
	dp[a][b][c]=1;
	for(int i=a;i<100;i++)
		for(int j=b;j<100;j++)
			for(int k=c;k<100;k++)
				dp[i+1][j][k]+=dp[i][j][k]*i/(i+j+k),dp[i][j+1][k]+=dp[i][j][k]*j/(i+j+k),dp[i][j][k+1]+=dp[i][j][k]*k/(i+j+k);
	for(int i=0;i<100;i++)
		for(int j=0;j<100;j++)
			ans+=dp[100][i][j]*(i+j+100-a-b-c),ans+=dp[i][100][j]*(i+j+100-a-b-c),ans+=dp[i][j][100]*(i+j+100-a-b-c);
	cout<<fixed<<setprecision(9)<<ans<<endl;
	return 0;
}