#include <bits/stdc++.h>
using namespace std;
using namespace chrono;
void _print(long long t) { cerr << t; }
void _print(string t) { cerr << t; }
void _print(char t) { cerr << t; }
void _print(long double t) { cerr << t; }
void _print(double t) { cerr << t; }
void _print(unsigned long long t) { cerr << t; }
template <class T, class V>
void _print(pair<T, V> p);
template <class T>
void _print(vector<T> v);
template <class T>
void _print(set<T> v);
template <class T, class V>
void _print(map<T, V> v);
template <class T>
void _print(multiset<T> v);
template <class T, class V>
void _print(pair<T, V> p) {
  cerr << "{";
  _print(p.first);
  cerr << ",";
  _print(p.second);
  cerr << "}";
}
template <class T>
void _print(vector<T> v) {
  cerr << "[ ";
  for (T i : v) {
    _print(i);
    cerr << " ";
  }
  cerr << "]";
}
template <class T>
void _print(set<T> v) {
  cerr << "[ ";
  for (T i : v) {
    _print(i);
    cerr << " ";
  }
  cerr << "]";
}
template <class T>
void _print(multiset<T> v) {
  cerr << "[ ";
  for (T i : v) {
    _print(i);
    cerr << " ";
  }
  cerr << "]";
}
template <class T, class V>
void _print(map<T, V> v) {
  cerr << "[ ";
  for (auto i : v) {
    _print(i);
    cerr << " ";
  }
  cerr << "]";
}
void init_code() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
long long r, p, s;
double dp[101][101][101][3];
double make(long long a, long long b, long long c, long long k) {
  ;
  ;
  ;
  if (k == 0) {
    if (a == 0) return 0;
    if (a && b == 0 && c == 0) {
      return 1;
    }
  }
  if (k == 1) {
    if (b == 0) return 0;
    if (b && a == 0 && c == 0) {
      return 1;
    }
  }
  if (k == 2) {
    if (c == 0) return 0;
    if (c && a == 0 && b == 0) {
      return 1;
    }
  }
  if (dp[a][b][c][k] == -1) {
    double choices = 0;
    double s = 0;
    choices = a * b + c * a + c * b;
    ;
    double ans = 0;
    double one = 1;
    if (a - 1 >= 0 && b - 1 >= 0) {
      ans = ans + a * b / choices * make(a, b - 1, c, k);
    }
    if (b - 1 >= 0 && c - 1 >= 0) {
      ans = ans + b * c / choices * make(a, b, c - 1, k);
    }
    if (a - 1 >= 0 && c - 1 >= 0) {
      ans = ans + a * c / choices * make(a - 1, b, c, k);
    }
    dp[a][b][c][k] = ans;
  }
  return dp[a][b][c][k];
}
signed main() {
  init_code();
  cin >> r >> s >> p;
  for (long long i = 0; i <= 100; i++) {
    for (long long j = 0; j <= 100; j++) {
      for (long long k = 0; k <= 100; k++) {
        for (long long l = 0; l < 3; l++) {
          dp[i][j][k][l] = -1;
        }
      }
    }
  };
  (cout << fixed << setprecision(10) << make(r, s, p, 0) << "\n");
  for (long long i = 0; i <= 100; i++) {
    for (long long j = 0; j <= 100; j++) {
      for (long long k = 0; k <= 100; k++) {
        for (long long l = 0; l < 3; l++) {
          dp[i][j][k][l] = -1;
        }
      }
    }
  };
  (cout << fixed << setprecision(10) << make(r, s, p, 1) << "\n");
  for (long long i = 0; i <= 100; i++) {
    for (long long j = 0; j <= 100; j++) {
      for (long long k = 0; k <= 100; k++) {
        for (long long l = 0; l < 3; l++) {
          dp[i][j][k][l] = -1;
        }
      }
    }
  };
  (cout << fixed << setprecision(10) << make(r, s, p, 2) << "\n");
}
