#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <map>
#include <set>
#include <limits>
#include <climits>
#include <cmath>
#include <functional>
#include <ctime>
#include <cstdlib>
#include <fstream>
#include <typeinfo>
#include <cassert>
#include <unordered_map>
#include <unordered_set>
#define debug(x) cout<<(x)<<'\n'
#define endl '\n'
#define remainder safdskhaslfa
#define pow aafkhffhlgsdas
#define distance dagkjsdsdsara
#define left askfjasieqwskajdaks
using namespace std;
typedef long long int ll;
typedef short int i16;
typedef unsigned long long int u64;
typedef unsigned int u32;
typedef unsigned short int u16;
typedef unsigned char u8;
bool used[128][128][128];
double state[128][128][128];
double recurse1(int r, int s, int p) {
if(p==0 && s==0) {
if(r==0) return 0.0;
return 1.0;
}
if(r==0) {
return 0.0;
}
if(used[r][s][p]) return state[r][s][p];
double ans=0.0;
int total=r*s+r*p+p*s;
if(r>0 && s>0) {
ans+=(double)r*s/(double)total*recurse1(r,s-1,p);
}
if(r>0 && p>0) {
ans+=(double)r*p/(double)total*recurse1(r-1,s,p);
}
if(p>0 && s>0) {
ans+=(double)p*s/(double)total*recurse1(r,s,p-1);
}
used[r][s][p]=true;
state[r][s][p]=ans;
return ans;
}
double recurse2(int r, int s, int p) {
if(r==0 && p==0) {
if(s==0) return 0.0;
return 1.0;
}
if(s==0) {
return 0.0;
}
if(used[r][s][p]) return state[r][s][p];
double ans=0.0;
int total=r*s+r*p+p*s;
if(r>0 && s>0) {
ans+=(double)r*s/(double)total*recurse2(r,s-1,p);
}
if(r>0 && p>0) {
ans+=(double)r*p/(double)total*recurse2(r-1,s,p);
}
if(p>0 && s>0) {
ans+=(double)p*s/(double)total*recurse2(r,s,p-1);
}
used[r][s][p]=true;
state[r][s][p]=ans;
return ans;
}
double recurse3(int r, int s, int p) {
if(r==0 && s==0) {
if(p==0) return 0.0;
return 1.0;
}
if(p==0) {
return 0.0;
}
if(used[r][s][p]) return state[r][s][p];
double ans=0.0;
int total=r*s+r*p+p*s;
if(r>0 && s>0) {
ans+=(double)r*s/(double)total*recurse3(r,s-1,p);
}
if(r>0 && p>0) {
ans+=(double)r*p/(double)total*recurse3(r-1,s,p);
}
if(p>0 && s>0) {
ans+=(double)p*s/(double)total*recurse3(r,s,p-1);
}
used[r][s][p]=true;
state[r][s][p]=ans;
return ans;
}
int r,s,p;
void input() {
scanf("%d %d %d", &r, &s, &p);
}
void solve() {
memset(used,0,sizeof(used));
printf("%.15lf", recurse1(r,s,p));
memset(used,0,sizeof(used));
printf(" %.15lf", recurse2(r,s,p));
memset(used,0,sizeof(used));
printf(" %.15lf", recurse3(r,s,p));
printf("\n");
}
int main() {
input();
solve();
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0YWNrPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxkZXF1ZT4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPGxpbWl0cz4KI2luY2x1ZGUgPGNsaW1pdHM+CiNpbmNsdWRlIDxjbWF0aD4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxjdGltZT4KI2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxmc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CiNpbmNsdWRlIDxjYXNzZXJ0PgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CgojZGVmaW5lIGRlYnVnKHgpIGNvdXQ8PCh4KTw8J1xuJwoKI2RlZmluZSBlbmRsICdcbicKI2RlZmluZSByZW1haW5kZXIgc2FmZHNraGFzbGZhCiNkZWZpbmUgcG93IGFhZmtoZmZobGdzZGFzCiNkZWZpbmUgZGlzdGFuY2UgZGFna2pzZHNkc2FyYQojZGVmaW5lIGxlZnQgYXNrZmphc2llcXdza2FqZGFrcwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIGludCBsbDsKdHlwZWRlZiBzaG9ydCBpbnQgaTE2Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdTY0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHUxNjsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OwoKYm9vbCB1c2VkWzEyOF1bMTI4XVsxMjhdOwpkb3VibGUgc3RhdGVbMTI4XVsxMjhdWzEyOF07Cgpkb3VibGUgcmVjdXJzZTEoaW50IHIsIGludCBzLCBpbnQgcCkgewogICAgaWYocD09MCAmJiBzPT0wKSB7CiAgICAgICAgaWYocj09MCkgcmV0dXJuIDAuMDsKICAgICAgICByZXR1cm4gMS4wOwogICAgfQoKICAgIGlmKHI9PTApIHsKICAgICAgICByZXR1cm4gMC4wOwogICAgfQoKICAgIGlmKHVzZWRbcl1bc11bcF0pIHJldHVybiBzdGF0ZVtyXVtzXVtwXTsKCiAgICBkb3VibGUgYW5zPTAuMDsKICAgIGludCB0b3RhbD1yKnMrcipwK3AqczsKCiAgICBpZihyPjAgJiYgcz4wKSB7CiAgICAgICAgYW5zKz0oZG91YmxlKXIqcy8oZG91YmxlKXRvdGFsKnJlY3Vyc2UxKHIscy0xLHApOwogICAgfQoKICAgIGlmKHI+MCAmJiBwPjApIHsKICAgICAgICBhbnMrPShkb3VibGUpcipwLyhkb3VibGUpdG90YWwqcmVjdXJzZTEoci0xLHMscCk7CiAgICB9CgogICAgaWYocD4wICYmIHM+MCkgewogICAgICAgIGFucys9KGRvdWJsZSlwKnMvKGRvdWJsZSl0b3RhbCpyZWN1cnNlMShyLHMscC0xKTsKICAgIH0KCiAgICB1c2VkW3JdW3NdW3BdPXRydWU7CiAgICBzdGF0ZVtyXVtzXVtwXT1hbnM7CgogICAgcmV0dXJuIGFuczsKfQoKZG91YmxlIHJlY3Vyc2UyKGludCByLCBpbnQgcywgaW50IHApIHsKICAgIGlmKHI9PTAgJiYgcD09MCkgewogICAgICAgIGlmKHM9PTApIHJldHVybiAwLjA7CiAgICAgICAgcmV0dXJuIDEuMDsKICAgIH0KCiAgICBpZihzPT0wKSB7CiAgICAgICAgcmV0dXJuIDAuMDsKICAgIH0KCiAgICBpZih1c2VkW3JdW3NdW3BdKSByZXR1cm4gc3RhdGVbcl1bc11bcF07CgogICAgZG91YmxlIGFucz0wLjA7CiAgICBpbnQgdG90YWw9cipzK3IqcCtwKnM7CgogICAgaWYocj4wICYmIHM+MCkgewogICAgICAgIGFucys9KGRvdWJsZSlyKnMvKGRvdWJsZSl0b3RhbCpyZWN1cnNlMihyLHMtMSxwKTsKICAgIH0KCiAgICBpZihyPjAgJiYgcD4wKSB7CiAgICAgICAgYW5zKz0oZG91YmxlKXIqcC8oZG91YmxlKXRvdGFsKnJlY3Vyc2UyKHItMSxzLHApOwogICAgfQoKICAgIGlmKHA+MCAmJiBzPjApIHsKICAgICAgICBhbnMrPShkb3VibGUpcCpzLyhkb3VibGUpdG90YWwqcmVjdXJzZTIocixzLHAtMSk7CiAgICB9CgogICAgdXNlZFtyXVtzXVtwXT10cnVlOwogICAgc3RhdGVbcl1bc11bcF09YW5zOwoKICAgIHJldHVybiBhbnM7Cn0KCmRvdWJsZSByZWN1cnNlMyhpbnQgciwgaW50IHMsIGludCBwKSB7CiAgICBpZihyPT0wICYmIHM9PTApIHsKICAgICAgICBpZihwPT0wKSByZXR1cm4gMC4wOwogICAgICAgIHJldHVybiAxLjA7CiAgICB9CgogICAgaWYocD09MCkgewogICAgICAgIHJldHVybiAwLjA7CiAgICB9CgogICAgaWYodXNlZFtyXVtzXVtwXSkgcmV0dXJuIHN0YXRlW3JdW3NdW3BdOwoKICAgIGRvdWJsZSBhbnM9MC4wOwogICAgaW50IHRvdGFsPXIqcytyKnArcCpzOwoKICAgIGlmKHI+MCAmJiBzPjApIHsKICAgICAgICBhbnMrPShkb3VibGUpcipzLyhkb3VibGUpdG90YWwqcmVjdXJzZTMocixzLTEscCk7CiAgICB9CgogICAgaWYocj4wICYmIHA+MCkgewogICAgICAgIGFucys9KGRvdWJsZSlyKnAvKGRvdWJsZSl0b3RhbCpyZWN1cnNlMyhyLTEscyxwKTsKICAgIH0KCiAgICBpZihwPjAgJiYgcz4wKSB7CiAgICAgICAgYW5zKz0oZG91YmxlKXAqcy8oZG91YmxlKXRvdGFsKnJlY3Vyc2UzKHIscyxwLTEpOwogICAgfQoKICAgIHVzZWRbcl1bc11bcF09dHJ1ZTsKICAgIHN0YXRlW3JdW3NdW3BdPWFuczsKCiAgICByZXR1cm4gYW5zOwp9CgppbnQgcixzLHA7Cgp2b2lkIGlucHV0KCkgewogICAgc2NhbmYoIiVkICVkICVkIiwgJnIsICZzLCAmcCk7Cn0KCnZvaWQgc29sdmUoKSB7CiAgICBtZW1zZXQodXNlZCwwLHNpemVvZih1c2VkKSk7CiAgICBwcmludGYoIiUuMTVsZiIsIHJlY3Vyc2UxKHIscyxwKSk7CgogICAgbWVtc2V0KHVzZWQsMCxzaXplb2YodXNlZCkpOwogICAgcHJpbnRmKCIgJS4xNWxmIiwgcmVjdXJzZTIocixzLHApKTsKCiAgICBtZW1zZXQodXNlZCwwLHNpemVvZih1c2VkKSk7CiAgICBwcmludGYoIiAlLjE1bGYiLCByZWN1cnNlMyhyLHMscCkpOwoKICAgIHByaW50ZigiXG4iKTsKfQoKaW50IG1haW4oKSB7CiAgICBpbnB1dCgpOwogICAgc29sdmUoKTsKCiAgICByZXR1cm4gMDsKfQo=