Taking into account the new information from your edit, I propose the following:
Function to produce the edge labels according to multiplicity indicated in the adjacency matrix.
edgeLbl[multipliciy_] :=
Style[StringJoin @ ConstantArray["+", multipliciy], Background -> White]
Function to style the edges according to multiplicity.
edgeStyle[multipliciy_] := AbsoluteThickness[multipliciy]
My reason for defining these functions is to make it easy to modify the look of graph edges without having to modify the main graph making function, which is:
gr[adjMatrix_] :=
Module[{m, edges, style, lbls},
m = Map[Boole[# > 0] &, adjMatrix, {2}];
edges = EdgeList @ AdjacencyGraph[m];
style = Rule[#, edgeStyle[adjMatrix[[#[[1]], #[[2]]]]]] & /@ edges;
lbls = Rule[#, edgeLbl[adjMatrix[[#[[1]], #[[2]]]]]] & /@ edges;
AdjacencyGraph[m,
EdgeStyle -> style,
EdgeLabels -> lbls,
VertexLabels -> "Name"]]
gr[{{0, 1, 0}, {0, 0, 2}, {3, 0, 0}}]

Update
The above doesn't adjust the size of the arrow heads according to the multiplicity. If you think that should happen, then a another function is needed.
arrow[multipliciy_] :=
GraphElementData[{"FilledArrow", "ArrowSize" -> .018 + .01 multipliciy}]
gr[adjMatrix_] :=
Module[{m, edges, style, arrows, lbls},
m = Map[Boole[# > 0] &, adjMatrix, {2}];
edges = EdgeList@AdjacencyGraph[m];
style = Rule[#, edgeStyle[adjMatrix[[#[[1]], #[[2]]]]]] & /@ edges;
lbls = Rule[#, edgeLbl[adjMatrix[[#[[1]], #[[2]]]]]] & /@ edges;
arrows = Rule[#, arrow[adjMatrix[[#[[1]], #[[2]]]]]] & /@ edges;
AdjacencyGraph[m,
EdgeStyle -> style,
EdgeLabels -> lbls,
EdgeShapeFunction -> arrows,
VertexLabels -> "Name"]]
gr[{{0, 1, 0}, {0, 0, 2}, {3, 0, 0}}]
