/*
PROB: abcd
LANG: C++
*/
#include <iostream>
#include <cstdio>
#include <string>
#include <queue>
#include <vector>
#include <cmath>
#include <cstring>
#include <set>
#include <algorithm>
#if 0
#define eprintf(msg,...) fprintf( stderr , "Line %d: " msg "\n", __LINE__, ##__VA_ARGS__ )
#else
#define eprintf(...) 0
#endif

using namespace std;

typedef long long ll;

const int MAXDELTA = 1000000;
const double STEP = 0.1;
const int MAXDEPTH = 22;
const double EPS = 1e13;
const double INF = 1e100;

double p,q,r;
double x1,x2,x3,x4;

double mysearch( double lo, double hi, double step , int depth ){
    double y1;
    double y2;
    double y3;
    double y4;
    double ac,ab;
    
    y1 = 0;
    
    double bestarea = INF;
    double bestloc = INF;
    
    for( y2 = lo ; y2 < hi ; y2 += step ){
        y3 = ( x2 * x3 ) / -y2;
        y4 = x2*(x4-2) / -y2;
        y4 += y2;
       
        ac = x3*x3 + y3*y3;
        ab = x2*x2 + y2*y2;
        
        if( ac*ab - bestarea < -1e-13 )
          bestarea = ac*ab, bestloc = y2;
    }
    
    if( bestloc == INF )
      fprintf( stderr , "o.O\n" );
    
    if( depth == MAXDEPTH )
      return bestarea;
    else
      return mysearch( bestloc - step , bestloc + step , step/10.0 , depth+1);
}

int main( int argc, char* argv[] ){
    //freopen( "abcd.in" , "r" , stdin );
	  //freopen( "abcd.out" , "w" , stdout );
	
	  scanf("%lf %lf %lf", &p, &q, &r);
	  
	  if( fabs( p-r ) >= 1e10 )
	    printf("0\n");
    else{
	    x1 = 0, x2 = p, x3 = p + q , x4 = p + q + r;
	    //eprintf("P = %lf, Q = %lf , R = %lf", p,q,r);
	    //find();
	    printf("%.4lf\n", sqrt( mysearch( -100000000000. , 0 , 1000000000. , 0 ) ) );
    }
	
	  return 0;
}