#include <bits/stdc++.h>
#define LL long long
#define pii pair<int,int>
#define pll pair<LL,LL>
#define INF 0x7f3f3f3f
using namespace std;

const int MAX = 2e5+10;
double f[110][110][110];


int main()
{

    //freopen("in.txt","r",stdin);
    int Cas = 1;
    //scanf("%d",&Cas);
    while(Cas--)
    {
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        f[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++)
                {
                    if (i>0)
                        f[i+1][j][k] += f[i][j][k]*1.0*i/(i+j+k);
                    if (j>0)
                        f[i][j+1][k] += f[i][j][k]*1.0*j/(i+j+k);
                    if (k>0)
                        f[i][j][k+1] += f[i][j][k]*1.0*k/(i+j+k);
                }
        double p=0;
        for (int i = 0;i <= 100;i++)
            for (int j = 0;j <= 100;j++)
                for (int k = 0;k <= 100;k++)
                    if (((i==100)+(j==100)+(k==100)==1) && f[i][j][k] != 0)
                        p+=f[i][j][k]*(i+j+k-a-b-c);
        printf("%.9f\n",p);
    }
    return 0;
}


#include<bits/stdc++.h>
#include <ext/pb_ds/detail/standard_policies.hpp>
#include <ext/pb_ds/assoc_container.hpp> 
#include <ext/pb_ds/tree_policy.hpp>
#define ll long long
#define int long long 
#define pb push_back
#define ins insert
#define rs resize
#define br break;
#define cont continue;
#define vi vector<int>
#define vll vector<long long>
#define vvi vector<vector<int>>
#define si set<ll>
#define sll set<long long>
#define pii pair<ll,ll>
#define pll pair<long long, long long>
#define speed ios_base::sync_with_stdio(false);cin.tie(NULL);
#define vec vector
#define cend cout<<endl;
#define sc second
#define fr first
#define retz return 0;
#define ll_MAX (ll)(1e9*1e9)
#define ll_MIN (ll)(-1e9*1e9)
#define lb lower_bound
#define ub upper_bound
#define rep(i,a,b)  for(int i=a; i<=b; i++)
#define repd(i,a,b) for(int i=a; i>=b; i--)
#define ps(arr, n) for(int i=1; i<n; i++)arr[i]+=arr[i-1];
#define inp(arr, n)for(int i=0; i<n; i++)cin>>arr[i];
#define out(arr, n)for(int i=0; i<n; i++)cout<<arr[i];
#define inp1(arr,n,m)for(int i=0; i<n; i++)for(int j=0;j<m;j++)cin>>arr[i][j];
#define out1(arr,n,m)for(int i=0; i<n; i++)for(int j=0;j<m;j++)cin>>arr[i][j];
#define loop(q) for(auto it:q)
#define loop1(q) for(auto&it:q)
#define db1 cout << "*" << endl
#define db2 cout << "YES" << endl
using namespace std;
using namespace __gnu_pbds; 
#define oset(X) tree<X,null_type,less<X>, rb_tree_tag, tree_order_statistics_node_update> 
#define roset(X) tree<X,null_type,greater<X>, rb_tree_tag, tree_order_statistics_node_update>  
#define okey order_of_key //lower_bound_set
#define ofind find_by_order
#define cyes cout << "Yes" << endl; 
#define cno cout << "No" << endl;
#define mod (long long)1000000007
#define mod2 (long long)998244353
#define INT_MAX1 900000000
#define MAXN 2000000
#define INF INT_MAX


double dp[101][101][101];
bool v[101][101][101];


double f1(int a, int b, int c)
{
	if(a == 100 || b == 100 || c == 100)
		return 0;
	if(v[a][b][c])
		return dp[a][b][c];
	v[a][b][c] = 1;
	int tot = a+b+c;
	return dp[a][b][c] = 1 + (a*f1(a+1, b, c) + b*f1(a, b+1, c) + c*f1(a, b, c+1))/tot;
}



void solve()
{
	int a, b, c;
	cin >> a >> b >> c;
	cout << setprecision(25) << f1(a, b, c) << endl;

}


signed main() 
{ 
  	speed;
    int t = 1; 
    //cin >> t; 
    while (t--)
        solve(); 
	return 0;
} 
