/*
PROB: abcd
LANG: C++
*/
#include <iostream>
#include <cstdio>
#include <string>
#include <queue>
#include <vector>
#include <cmath>
#include <cstring>
#include <set>
#include <algorithm>
#if 1
#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 = 10000;
const double STEP = 0.002;

double p,q,r;

void find(){
    double x1,y1;
    double x2,y2;
    double x3,y3;
    double x4,y4;
    double ac,ab,dot;
    
    x1 = y1 = 0;
    x2 = p;
    x3 = p+q;
    x4 = p+q+r;
    
    double s = p+q+r;
    
    double bestarea = 1e20;
    
    for( y2 = -MAXDELTA ; y2 < 0 ; y2 += STEP ){
        if( y2 == 0 )
          continue;
        
        y3 = ( x2*x3 ) / -y2;
        y4 = x2*(x4-x2) / -y2;
        y4 += y2;
        
        if( fabs( y4 - y2 - y3 ) >= 1e10 ){
          continue;
        }
        
        ac = x3*x3+y3*y3;
        ab = x2*x2+y2*y2;
        
        /**
         * Now surely there is right angle: <BAC, <ABD, if angle <ACD is right we got a rectangle ;)
         */
        dot = x2*(x2-x4) - y2*(y4-y2);
        //eprintf("If B = (%.2lf,%.2lf), C = (%.2lf,%.2lf), D = (%.2lf,%.2lf)\n   , dot(%.2lf,%.2lf).(%.2lf,%.2lf) = %.6lf, S^2 = %.4lf", x2,y2,x3,y3,x4,y4,-x2,-y2,x4-x2,y4-y2,dot,ac*ab );
        
        bestarea = min( bestarea , ac*ab );
    }
    
    printf("%.4lf\n", sqrt( bestarea ) );
}

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{
	  
	    //eprintf("P = %lf, Q = %lf , R = %lf", p,q,r);
	  
	    find();
    }
	
	  return 0;
}