That not bad at all especially considering the low poly count.
Vertex weighting around the shoulders can help but it depends on now many "rings" of vertices you've got. From your poly count I doubt you've got enough.
Normally putting an extra "ring" around the joints allows you to distribute the weight.
Another way, and without increasing the polycount, is to not assign any vertices actually at the shoulder to the shoulder joint - but assign then to a joint in the thorax. The only vertices that are assigned to the shoulder joint would be those lower down the arm and at the elbow etc. The vertices around the shoulder then never deform. Think of it like a sleeveless T shirt. That should all be assigned to a joint(s) in the upper body.
Vertex weighting around the shoulders can help but it depends on now many "rings" of vertices you've got. From your poly count I doubt you've got enough.
Normally putting an extra "ring" around the joints allows you to distribute the weight.
Another way, and without increasing the polycount, is to not assign any vertices actually at the shoulder to the shoulder joint - but assign then to a joint in the thorax. The only vertices that are assigned to the shoulder joint would be those lower down the arm and at the elbow etc. The vertices around the shoulder then never deform. Think of it like a sleeveless T shirt. That should all be assigned to a joint(s) in the upper body.