#include <bits/stdc++.h>
using namespace std;
void init() {
  ios::sync_with_stdio(0);
  srand(time(0));
}
void pause() { puts(""); }
void scanBigInteger(vector<short> &A) {
  string s;
  cin >> s;
  for (int x = s.length() - 1; x >= 0; x--) {
    A.push_back(s[x] - '0');
  }
}
void printBigInteger(vector<short> A) {
  if (A.empty())
    cout << 0 << endl;
  else
    for (int x = A.size() - 1; x >= 0; x--) cout << A[x];
}
void swap(vector<short> &A, vector<short> &B) {
  vector<short> C = A;
  A = B;
  B = C;
}
void convert(vector<short> &A, vector<short> &B) {
  if (A.size() > B.size())
    while (abs((int)A.size() - (int)B.size())) B.push_back(0);
  if (A.size() < B.size())
    while (abs((int)A.size() - (int)B.size())) A.push_back(0);
}
void normalize(vector<short> &A) {
  while (A.size() && A[A.size() - 1] == 0) A.pop_back();
}
bool operator>(vector<short> A, vector<short> B) {
  if (A.size() > B.size()) return true;
  if (A.size() < B.size())
    return false;
  else {
    for (int i = A.size() - 1; i >= 0; i--) {
      if (A[i] == B[i]) continue;
      if (A[i] > B[i]) return true;
      if (A[i] < B[i]) return false;
    }
    return false;
  }
}
bool operator<(vector<short> A, vector<short> B) {
  if (A.size() > B.size()) return false;
  if (A.size() < B.size())
    return true;
  else {
    for (int i = A.size() - 1; i >= 0; i--) {
      if (A[i] == B[i]) continue;
      if (A[i] > B[i]) return false;
      if (A[i] < B[i]) return true;
    }
    return false;
  }
}
bool operator!=(vector<short> A, vector<short> B) {
  if (A.size() != B.size()) return true;
  bool notequal = false;
  for (int i = 0; i < A.size() && !notequal; i++) {
    if (A[i] != B[i]) notequal = true;
  }
  return notequal;
}
bool operator==(vector<short> A, vector<short> B) {
  if (A.size() != B.size()) return false;
  bool equal = true;
  for (int i = 0; i < A.size() && equal; i++) {
    if (A[i] != B[i]) equal = false;
  }
  return equal;
}
bool operator<=(vector<short> A, vector<short> B) { return (A < B) | (A == B); }
bool operator>=(vector<short> A, vector<short> B) { return (A > B) | (A == B); }
vector<short> operator+(vector<short> A, vector<short> B) {
  vector<short> C;
  convert(A, B);
  int carry = 0;
  for (int i = 0; i < A.size(); i++) {
    carry += A[i] + B[i];
    C.push_back(carry % 10);
    carry /= 10;
  }
  if (carry) C.push_back(carry);
  return C;
}
vector<short> operator-(vector<short> A, vector<short> B) {
  if (B > A) swap(A, B);
  int carry = 0;
  for (int i = 0; i < A.size(); i++) {
    A[i] -= carry + int(i < B.size() ? B[i] : 0);
    carry = int(A[i] < 0);
    if (carry) A[i] += 10;
  }
  while (A.size() && A[A.size() - 1] == 0) A.pop_back();
  return A;
}
vector<short> operator*(vector<short> A, vector<short> B) {
  if (B > A) swap(A, B);
  vector<short> C;
  C.resize(A.size() + B.size());
  int slice = 0;
  for (int i = 0; i < A.size(); i++) {
    for (int j = 0; j < B.size() || slice; j++) {
      int tmp = C[i + j] + slice + (j < B.size() ? B[j] : 0) * A[i];
      C[i + j] = tmp % 10;
      slice = tmp / 10;
    }
  }
  while (C.size() && C[C.size() - 1] == 0) C.pop_back();
  return C;
}
long long power(long double a, long long b) {
  if (b < 2) return b ? a : 1;
  return (power((a * a), b / 2) * (b % 2 ? a : 1));
}
static long double pi = acos(-1);
long double R(long double a, long double n) {
  return (a) / (2.0 * sin(pi / n));
}
long double H(long double r, long double l) { return sqrtf(l * l - r * r); }
long double V(long double h, long double l, int n) {
  return (n * l * l * h) / (12 * tan(pi / n));
}
int main() {
  init();
  long double l1, l2, l3;
  cin >> l1 >> l2 >> l3;
  long double ans = 0;
  ans = (l1 * l1 * l1 * sqrt(2)) / 12;
  ans += l2 * l2 * l2 / (3 * sqrt(2));
  ans += l3 * l3 * l3 * sqrt((5 + 2 * sqrt(5)) * (10 - 2 * sqrt(5))) / 24;
  cout << fixed << setprecision(10) << ans << endl;
  pause();
  return 0;
}
