#include<iostream>
#include<algorithm>
#include<map>
#include<cstdio>
#include<vector>
#include<queue>
#include<string>
#include<set>
#include<cmath>

using namespace std;
//#define wait system("pause")
#define y g
#define y1 g1
#define pb push_back
#define PII pair<int,int>
#define mp make_pair
#define LOW_BIT(x) (x&(-x))
double p1,q1,r1;
double x1,x2,x3,x4,y1,y2,y3,y4;
double minarea=9999999;
int main()
{
    scanf("%lf%lf%lf",&p1,&q1,&r1);
    x1=0;
    x3=x1+p1;  x4=x3+q1; x2=x4+r1;  bool ok=false; int mnoj=1;
    for(y2=0;y2<=1000;y2+=0.01)
    {      if(ok) mnoj=1; else mnoj=-1; ok=ok^1;
        double D=(y1-y2)*(y1-y2) -2*(x2-x3)*(x2-x3) -2*(x1-x3)*(x1-x3) +2*(x1-x2)*(x1-x2);
        y3=(y1+y2 + mnoj*sqrt(D))/2;
        double c1=(x2-x3)*(x2-x3) + (y2-y3)*(y2-y3);
        double d1=(x1-x3)*(x1-x3) + (y1-y3)*(y1-y3);
        double a=(y3-y1)/(x3-x1); double b=y2- x2*a;
            y4=a*x4 +b;
        double a1=(x1-x4)*(x1-x4) + (y1-y4)*(y1-y4);
        double b1=(x2-x4)*(x2-x4) + (y2-y4)*(y2-y4);
        double diag=(x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);


        if( a1+b1< diag && diag-a1-b1<=0.00001)
        { double area=sqrt(a1)*sqrt(b1);
            minarea=min(area,minarea);
        }
         if( a1+b1> diag && a1+b1-diag<=0.00001)
        { double area=sqrt(a1)*sqrt(b1);
           minarea=min(area,minarea);
        }
    }
    if(minarea==9999999) printf("0\n");
    else
    {

long long ans=minarea*100000;


if(ans%10>=5) {ans/=10; ans++;} else ans/=10;
printf("%d.",ans/10000);  ans=ans%10000; printf("%d",ans/1000);
ans=ans%1000; printf("%d",ans/100);
ans=ans%100; printf("%d",ans/10);
ans=ans%10; printf("0");
printf("\n");
    }
return 0;
}
