#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<ctime>
#include<deque>
#include<sstream>
#include<iomanip>
#include<sstream>
#include<vector>
#include<queue>
#include<stack>
#include<string>
#include<climits>
#include<map>
#include<set>
#include<list>
#include<cassert>
#include<deque>
#define REP(i,s,n) for(int i=s;i<n;i++)
#define rep(i,n) REP(i,0,n)
#define INF 1<<27
#define all(n) n.begin(),n.end()
#define insert(a,b,c,d) PP(P(a,b),P(c,d))
#define F first
#define S second
#define pb push_back
#define foreach(i,c) for(iter(c) i=(c).begin();i!=(c).end();++i)
using namespace std;
typedef pair<int,int> P;
typedef pair<P,P> PP;
typedef long long ll;
typedef unsigned long long ull;

double heroin(double a,double b,double c){
  double s = (a+b+c)*0.5;
  return sqrt(s*(s-a)*(s-b)*(s-c));
}

int main(){
  double a,l,x;
  while(cin >> a >> l >> x)
    {
      double area = heroin(a,l,l);
      area += 2*heroin(l,(l+x)*0.5,(l+x)*0.5);
      cout << setiosflags(ios::fixed) << setprecision(10) <<  area << endl;
    }
  return 0;
}